tcp四次挥手

读《TCP/IP详解》:TCP

可紊 提交于 2019-11-30 04:17:27
TCP(Transmission Control Protocol,传输控制协议),位于传输层,提供一种面向连接、可靠的字节流服务。 字节流服务 (Byte Stream Service)是指,为了方便传输,将大 块数据分割成以报文段(segment)为单位的数据包进行管理。 可靠的传输服务 是指,能够把数据准确可靠地传给对方。 面向连接 两个使用TCP的应用(C/S ),彼此交换数据之前必须建立一个TCP连接。 1、建立TCP连接(三次握手) (1)请求端(C)发送一个SYN段表明准备连接服务器(S)端口,以及初始序号(ISN,图中的100,本人随意取得值),即报文段1。 (2)服务器发回包含服务器的初始序号的SYN段(报文段2)作为应答。同时,将确认序号设置为请求端的ISN加1,以对请求端的SYN段进行确认。一个SYN占用一个序号。 (3)请求端将确认序号设置为服务器的ISN加1,以对服务器的SYN段进行确认(报文段3)。连接建立。 2、终止TCP连接(四次挥手) (1)客户端主动发起终止连接请求(FIN),即报文段4,用来关闭客户端到服务端的数据传送。 (2)服务端收到这个FIN,发回一个ACK,确认序号为收到的序号加1,即报文段5。同时,TCP服务器向应用程序发送一个文件结束符(EOF)。 (3)服务器关闭连接,发送一个FIN给客户端,即报文6。 (4

TCP/IP协议学习——传输层的TCP协议

匆匆过客 提交于 2019-11-30 03:26:00
IP协议是通过IP地址来进行定位寻址的,IP地址用来确定要将数据发送给那一台主机;而TCP与UDP协议中则是通过主机端口号来进行确定在主机上的那个应用程序来收发数据。 1. TCP协议提供的服务 1. TCP与UDP都基于网络层的IP协议,但是为应用层提供了完全不同的服务。 TCP提供了面向连接的、可靠的字节流服务 。面向连接表示在客户端与服务端的两个使用TCP协议的应用程序之间需要首先建立起一个TCP连接,然后才能进行交互数据,而且TCP中也只能进行两个主机之间的通信,无法实现多播和广播。 2. TCP协议保证数据传输可靠性的方式: (1)应用层传来的数据将被TCP协议分割为合适长度的数据块,这个传递给网络层IP协议处理的数据块被称为报文段。 (2)当TCP发出一个报文段,就会启动一个定时器,等待目的端确认接收该报文段,如果无法在定时器结束前接收确认消息,就会重发报文段。 (3)当一段的TCP收到另一端发送的数据时,就会响应一个确认消息。 (4)TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段并且不确认收到此报文段(希望发端超时并重发)。 (5)既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要

爆锤TCP/UDP

爷,独闯天下 提交于 2019-11-29 22:17:44
TCP/UDP TCP: 传输控制协议(英语:Transmission Control Protocol,缩写为TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 UDP: 用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称使用者资料包协定,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。 前言: 关于TCP和UDP这两个协议是面试中非常常见的问题,本文讨论以下几个问题: 什么是TCP 什么是UDP TCP和UDP的异同点 TCP和UDP的应用场景 1. TCP和UDP的异同点 1.1 相同点 UDP和TCP同属于传输层的协议 1.2 不同点 TCP面向字节流,而UDP面向数据报。 解释: TCP收发的是一堆数据,是一个数据流,而每次取多少由主机决定; 而UDP发的是数据报,客户发送多少就接收多少 TCP是面向连接的,而UDP不是面向连接的。 解释: TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的,因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。 而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。 TCP是可靠的,而UDP是不可靠的。 解释:

TCP的三次握手与四次挥手理解及面试题

六月ゝ 毕业季﹏ 提交于 2019-11-29 22:01:23
TCP的三次握手与四次挥手理解及面试题 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 ​ 确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效 ​ 同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。 ​ 终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接 ​ PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN

TCP三次握手和四次握手全过程 为什么要三次握手而不是二次握手?

蹲街弑〆低调 提交于 2019-11-29 21:13:18
三次握手 第一次握手 : 客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手 : 服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手 : 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。 三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。 为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。 为什么要进行三次握手,不是二次握手 谢希仁版《计算机网络》中的例子: "已失效的连接请求报文段”的产生在这样一种情况下: client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。 本来这是一个早已失效的报文段

zz 远程通信协议

大兔子大兔子 提交于 2019-11-29 21:10:41
https://www.jianshu.com/p/61714f90c061 在分布式架构中,有一个很重要的环节,就是分布式网络中的计算机节点彼此之间需要通信。 HTTP 协议通信原理 说到通信,大家一定听过 tcp 和 udp 这两种通信协议,以及建立连接的握手过程。而 http 协议的通信是基于 tcp/ip 协议之上的一个应用层协议,应用层协议除了 http 还有哪些呢(FTP、DNS、SMTP、Telnet 等)。 涉及到网络协议,我们一定需要知道 OSI 七层网络模型和 TCP/IP 四层概念模型,OSI 七层网络模型包含(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)、TCP/IP 四层概念模型包含(应用层、传输层、网络层、数据链路层)。 image.png 请求发起过程,在 tcp/ip 四层网络模型中所做的事情 当应用程序用 TCP 传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息) image.png 客户端如何找到目标服务 在客户端发起请求的时候,我们会在数据链路层去组装目标机器的 MAC 地址,目标机器的mac 地址怎么得到呢? 这里就涉及到一个 ARP 协议,这个协议简单来说就是已知目标机器的 ip,需要获得目标机器的 mac 地址。

TCP三次握手和四次挥手过程

那年仲夏 提交于 2019-11-29 19:35:42
1、三次握手 (1)三次握手的详述 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。( A、B关闭状态CLOSED —— B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED ) B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。 1 )第一次握手: A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段,(首部的 同步位SYN=1 , 初始序号seq=x) ,(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。 2 )第二次握手: B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中( SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y ),测试TCP服务器进程进入SYN-RCVD(同步收到)状态; 3 )第三次握手: TCP客户进程收到B的确认后

快速了解TCP的流量控制与拥塞控制

霸气de小男生 提交于 2019-11-29 18:18:49
有关TCP你不能不知道的三次握手和四次挥手问题, 点我跳转 流量控制 1. 滑动窗口 数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。 TCP规定,即使设置为零窗口,也必须接收以下几种报文段: 零窗口探测报文段 确认报文段 携带紧急数据的报文段 确认丢失和确认迟到 持续计时器 存在这样一种情况:发送方接收到零窗口报文之后将发送窗口设置为0,停止发送数据。但等到接收方有足够缓存,发送了非零窗口大小的报文,但是这个报文中途丢失,那么发送方的发送窗口就一直为0导致死锁。 为此,TCP为每一个连接设有一个持续计时器(Persistence Timer):当TCP连接的一方收到对方的零窗口通知时就启动持续计时器。若持续计时器时间到期,就发送一个零窗口探测报文段(携有1字节的数据),那么收到这个报文段的一方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器;若窗口不是零,则死锁的僵局就可以打破了。 2. 延迟ACK 如果TCP对每个数据包都发送一个ACK确认,那么只是一个单独的数据包为了发送一个ACK代价比较高,所以TCP会延迟一段时间

第五章 网络编程和并发编程

…衆ロ難τιáo~ 提交于 2019-11-29 17:08:18
1、python的底层网络交互模块有哪些?   socket, urllib,urllib3 , requests, grab, pycurl 2、简述OSI七层协议   应用层:HTTP,FTP,NFS   表示层:Telnet,SNMP   会话层:SMTP,DNS   传输层:TCP,UDP   网络层:IP,ICMP,ARP,   数据链路层:Ethernet,PPP,PDN,SLIP,FDDI   物理层:IEEE 802.1A,IEEE 802.11 3、什么是C/S和B/S架构   C/S架构:是指客服端和服务端,交互性好,对服务器压力小,安全,但是更新服务端的是后客户端也得更新。   B/S架构:是指浏览器和服务器,优点是不需要更新客服端,缺点是交互性差,安全性低。 4、简述TCP三次握手四次挥手的过程。   建立连接:   第一次握手:客户端向服务器发出请求。   第二次握手:服务器收到请求,同意连接,想客服端发送确认报文。   第三次握手:客服端接收到报文,向上层应用传达已建立连接。   释放连接:   第一次挥手:数据传输结束后,客服端发送连接释放报文段,并结束数据传输。   第二次挥手:服务端接收到连接释放报文段后,向客户端发送确认报文。   第三次挥手:服务器没有要发送的数据后,其应用进程就通知服务器释放TCP连接。这个阶段服务器所发出的最后一个报文。  

计算机网络易考知识点(九推)

好久不见. 提交于 2019-11-29 14:54:50
DHCP是什么 DHCP(Dynamic Host configuration Protocol,动态主机配置协议 ),它是TCP/IP协议簇中的一种,主要是用来给网络客户机分配动态的IP地址。 主要有两个用途: (1)用于内部网或网络服务供应商自动分配IP地址; (2)给用户用于内部网管理员作为对所有计算机作中央管理的手段。 功能简述:它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求。 DHCP 协议中分为两个角色: DHCP server服务端 和DHCP client客户端。 服务端:负责在所创建的地址池中向申请地址的客户端分发地址;服务端口号67 客户端:接收地址 服务端口号68 DHCP 基于UDP 发送所有的数据包, 在工作过程中依靠广播的形式发送报文信息, 与客户端实现交互,达到成功准确的分发地址。 OSI七层模型 七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 每层的作用 : 物理层(bit):处理信号通过介质传输,物理介质上透明地传输比特流。 数据链路层(帧):将网络层传来的IP数据报组装成帧,在不可靠的物理介质上提供可靠的物理传输。保证数据正确的顺序和完整性。 网络层(分组):负责数据包从源到宿的传递和网际互连。 传输层(TCP/IP):负责主机中两个进程的通信