首页 > 系统相关 >TCP进程与线程的区别

TCP进程与线程的区别

时间:2022-10-24 23:25:15浏览次数:51  
标签:主机 TCP 序号 线程 进程 连接

1、进程和线程的区别:

答:线程是指进程内的一个执行单元,也是进程内的可调度实体。与进程的区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。

(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

2、进程间通讯的方式有哪些,各有什么优缺点:

1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的亲缘关系通常是指父子进程关系。

2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式。

3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

7)套接字( socket ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

3、tcp连接建立的时候3次握手的具体过程,以及每一步原因:

(1)    第一步:源主机A的TCP向主机B发出连接请求报文段,其首部中的SYN(同步)标志位应置为1,表示想与目标主机B进行通信,并发送一个同步序列号X(例:SEQ=100)进行同步,表明在后面传送数据时的第一个数据字节的序号是X+1(即101)。SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。

(2)  第二步:目标主机B的TCP收到连接请求报文段后,如同意,则发回确认。在确认报中应将ACK位和SYN位置1,表示客户端的请求被接受。确认号应为X+1(图中为101),同时也为自己选择一个序号Y。

(3)  第三步:源主机A的TCP收到目标主机B的确认后要向目标主机B给出确认,其ACK置1,确认号为Y+1,而自己的序号为X+1。TCP的标准规定,SYN置1的报文段要消耗掉一个序号。

运行客户进程的源主机A的TCP通知上层应用进程,连接已经建立。当源主机A向目标主机B发送第一个数据报文段时,其序号仍为X+1,因为前一个确认报文段并不消耗序号。

当运行服务进程的目标主机B的TCP收到源主机A的确认后,也通知其上层应用进程,连接已经建立。至此建立了一个全双工的连接。

4、tcp断开连接的具体过程,其中每一步是为什么那么做:

1)第一步:源主机A的应用进程先向其TCP发出连接释放请求,并且不再发送数据。TCP通知对方要释放从A到B这个方向的连接,将发往主机B的TCP报文段首部的终止比特FIN置1,其序号X等于前面已传送过的数据的最后一个字节的序号加1。

2)第二步:目标主机B的TCP收到释放连接通知后即发出确认,其序号为Y,确认号为X+1,同时通知高层应用进程,这样,从A到B的连接就释放了,连接处于半关闭状态,相当于主机A向主机B说:“我已经没有数据要发送了。但如果还发送数据,我仍接收。”此后,主机B不再接收主机A发来的数据。但若主机B还有一些数据要发送主机A,则可以继续发送。主机A只要正确收到数据,仍应向主机B发送确认。

3)第三步:若主机B不再向主机A发送数据,其应用进程就通知TCP释放连接。主机B发出的连接释放报文段必须将终止比特FIN和确认比特ACK置1,并使其序号仍为Y,但还必须重复上次已发送过的ACK=X+1。

4) 第四步:主机A必须对此发出确认,将ACK置1,ACK=Y+1,而自己的序号是X+1。这样才把从B到A的反方向的连接释放掉。主机A的TCP再向其应用进程报告,整个连接已经全部释放。

5、tcp建立连接和断开连接的各种过程中的状态转换细节:

客户端:主动打开SYN_SENT--->ESTABLISHED--->主动关闭FIN_WAIT_1--->FIN_WAIT_2--->TIME_WAIT

服务器端:LISTEN(被动打开)--->SYN_RCVD--->ESTABLISHED--->CLOSE_WAIT(被动关闭)--->LAST_ACK--->CLOSED



作者:Time_x
链接:https://www.jianshu.com/p/bbcc23f57ba1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:主机,TCP,序号,线程,进程,连接
From: https://www.cnblogs.com/YesIamK/p/16823419.html

相关文章

  • zbx_tcp_listen() fatal error:unable to serve on any address [[-]:10070]
    Zabbix服务器未启动侦听器失败:zbx_tcp_listen()致命错误:无法在任何地址上提供服务[[-]:10070]日志错误:服务状态以及尝试启动时:进程正在运行:但是服务仍然停止: ......
  • JVM中的进程和线程
    JVM中的进程和线程介绍一个进程可以有很多个线程,进程之间基本上都是独立的,但是同一进程中的不同线程很可能会相互影响。每个线程有自己的程序计数器、虚拟机栈和本地方......
  • java 线程
                Runnable           getName        线程让步  join()  Thread.sleep();......
  • Linux进程间通信(一)
    进程间通信概念:进程是一个独立的资源分配单位,不同进程之间有关联,不能在一个进程中直接访问另一个进程的资源。进程和进程之间的资源是相互独立的,一个进程不能直接访问另......
  • mac 电脑根据端口杀掉进程
    l@-MBP~%lsof-itcp:9200COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEjava30266langjunnan346uIPv60xabca34c88ea6bd43......
  • 记录一次挖矿进程导致CPU 600%处理经过
    事件描述登陆到测试服务器,发现CPU使用率飙到了700%,考虑可能是机器被攻击。查看进程名称,有一个异常进程在搞怪。处理过程为了让机器尽快恢复,用kill-918616杀掉了这个......
  • 4.5 Kafka Consumer API之多线程并发处理
    1.Consumer一对一消费Partition(1).简介这种类型是经典模式,每一个线程单独创建一个KafkaConsumer消费一个partition,用于保证线程安全。(2).代码示例publicclassKafkaCon......
  • Windows创建高权限进程和低权限进程
    我们一般使用的是管理员账户,如果开启了UAC,那么默认情况下双击一个程序时是以medium权限运行,称为受限的管理员权限,如果右键程序“以管理员权限运行”,那么程序是high权限,称为......
  • day18-线程
    线程创建线程方式:继承thread类,重写run()方法,调用start开启线程 1publicclassTestThreadextendsThread{2@Override3publicvoidrun(){4......
  • 线程安全的Generic Dictionary
     ​​System.Collections.Generic.Dictionary<,>​​只要不修改该集合,Dictionary就可以同时支持多个阅读器。即便如此,从头到尾对一个集合进行枚举本质上并不是一个线程......