新圩做网站公司,北京网站制作工具,wordpress单本小说站,wordpress长期未更新提醒TCP/IP 协议族
在互联网使用的各种协议中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的 TCP/IP 并不一定是单指 TCP 和 IP 这两个具体的协议#xff0c;而往往是表示互联网所使用的整个 TCP/IP 协议族。 互联网协议套件#xff08;英语#xff1a;Internet Pr… TCP/IP 协议族
在互联网使用的各种协议中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的 TCP/IP 并不一定是单指 TCP 和 IP 这两个具体的协议而往往是表示互联网所使用的整个 TCP/IP 协议族。 互联网协议套件英语Internet Protocol Suite缩写IPS是一个网络通讯模型以及一整个网络传输协议家族为网际网络的基础通讯架构。它常被通称为TCP/IP协议族英语TCP/IP Protocol Suite或TCP/IP Protocols简称TCP/IP。因为该协定家族的两个核心协定TCP传输控制协议和IP网际协议为该家族中最早通过的标准。
划重点
TCP传输控制协议和IP网际协议 是最先定义的两个核心协议所以才统称为TCP/IP协议族
TCP的三次握手四次挥手
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议在发送数据前通信双方必须在彼此间建立一条连接。所谓的“连接”其实是客户端和服务端保存的一份关于对方的信息如ip地址、端口号等。
TCP可以看成是一种字节流它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中双方需要交换一些连接的参数。这些参数可以放在TCP头部。
一个TCP连接由一个4元组构成分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段连接、数据传输、退出关闭。通过三次握手建立一个链接通过四次挥手来关闭一个连接。
当一个连接被建立或被终止时交换的报文段只包含TCP头部而没有数据。
TCP报文的头部结构
在了解TCP连接之前先来了解一下TCP报文的头部结构。 上图中有几个字段需要重点介绍下
1序号seq序号占32位用来标识从TCP源端向目的端发送的字节流发起方发送数据时对此进行标记。
2确认序号ack序号占32位只有ACK标志位为1时确认序号字段才有效ackseq1。
3标志位共6个即URG、ACK、PSH、RST、SYN、FIN等具体含义如下 ACK确认序号有效。 FIN释放一个连接。 PSH接收方应该尽快将这个报文交给应用层。 RST重置连接。 SYN发起一个新连接。 URG紧急指针urgent pointer有效。
需要注意的是 不要将确认序号ack与标志位中的ACK搞混了。 确认方ack发起方seq1两端配对。
三次握手
三次握手的本质是确认通信双方收发数据的能力
首先我让信使运输一份信件给对方对方收到了那么他就知道了我的发件能力和他的收件能力是可以的。
于是他给我回信我若收到了我便知我的发件能力和他的收件能力是可以的并且他的发件能力和我的收件能力是可以。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以于是我最后回馈一次他若收到了他便清楚了他的发件能力和我的收件能力是可以的。
这就是三次握手这样说你理解了吗 第一次握手客户端要向服务端发起连接请求首先客户端随机生成一个起始序列号ISN(比如是100)那客户端向服务端发送的报文段包含SYN标志位(也就是SYN1)序列号seq100。 第二次握手服务端收到客户端发过来的报文后发现SYN1知道这是一个连接请求于是将客户端的起始序列号100存起来并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文回复报文包含SYN和ACK标志(也就是SYN1,ACK1)、序列号seq300、确认号ack101(客户端发过来的序列号1)。 第三次握手客户端收到服务端的回复后发现ACK1并且ack101,于是知道服务端已经收到了序列号为100的那段报文同时发现SYN1知道了服务端同意了这次连接于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端报文包含ACK标志位(ACK1)、ack301(服务端序列号1)、seq101(第一次握手时发送报文是占据一个序列号的所以这次seq就从101开始需要注意的是不携带数据的ACK报文是不占据序列号的所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK1并且ack301就知道客户端收到序列号为300的报文了就这样客户端和服务端通过TCP建立了连接。
四次挥手
四次挥手的目的是关闭一个连接 比如客户端初始化的序列号ISA100服务端初始化的序列号ISA300。TCP连接成功后客户端总共发送了1000个字节的数据服务端在客户端发FIN报文前总共回复了2000个字节的数据。 第一次挥手当客户端的数据都传输完成后客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据)释放连接报文包含FIN标志位(FIN1)、序列号seq1101(10011000其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了但是还可以正常收数据另外FIN报文段即使不携带数据也要占据一个序列号。 第二次挥手服务端收到客户端发的FIN报文后给客户端回复确认报文确认报文包含ACK标志位(ACK1)、确认号ack1102(客户端FIN报文序列号11011)、序列号seq2300(3002000)。此时服务端处于关闭等待状态而不是立马给客户端发FIN报文这个状态还要持续一段时间因为服务端可能还有数据没发完。 第三次挥手服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文报文包含FIN和ACK标志位(FIN1,ACK1)、确认号和第二次挥手一样ack1102、序列号seq2350(230050)。 第四次挥手客户端收到服务端发的FIN报文后向服务端发出确认报文确认报文包含ACK标志位(ACK1)、确认号ack2351、序列号seq1102。注意客户端发出确认报文后不是立马释放TCP连接而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接所以服务端结束TCP连接的时间要比客户端早一些。