您的位置:首页 > 理论基础 > 计算机网络

《TCP-IP详解 卷1:协议》学习笔记(一)

2013-08-28 10:33 567 查看
由于要从事通信协议的开发工作,最近开始学习TCP-IP详解三卷书,希望通过不断的更新博客,同大家共同的学习,相信网络的力量是能够激发人的思维的!

 

一、如何区别DIXV2帧和IEEE帧?

由于二者在同一个局域网内是不能共存的。因此,IEEE允许现存的DIXV2网卡和网络设备到IEEE的标准设备的迁移。为了使设备可以识别使用的是哪种类型的帧,IEEE没有分配1536以下(十六进制为600)的数位协议类型代码。数据字段的最大值为1500字节。所以一台设备可以从源地址后的两个字节来判断是哪种类型的帧,如果值为1536(十进制)或更高则为类型字段,意味着是DIXV2帧,如果从源地址之后的2个字节小于1536,则可确定是长度字段,为IEEE802.3帧



二、TCP的连接的建立和释放

由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN意味着这个方向上没有数据流动,一个TCP连接收到一个FIN后仍能发送数据。一个主动关闭,一个被动关闭。

但为什么连接是三次握手,而关闭是四次握手?

因为服务器端的LISTEN状态下的socket当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK其应答作用,SYN起同步作用)放在一个报文里来发送。

但关闭连接时,当收到对方的FIN报文时,它仅仅表示对方没有数据发送给你了,但未必你所有的数据都全部发送给对方了,所以你可以未必会马上关闭socket,也即你可能还需要发送一些数据给对方,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下是分开发送的

下图是TCP建立连接、关闭的过程:



我用Wireshark抓包工具抓取了TCP建立连接的报文,如下过程所示:

(1)第一次握手的数据包,可以看到客户端发送一个TCP,标志位为SYN,序列号为0,代表客户端请求建立连接,如下图:



(2)第二次握手的数据包,可以看到服务器发回确认包,标志位为SYN,ACK。将确认序号ack设置为1(即使不发送数据也要消耗一个序列号)如下图:



(3)第三次握手的数据包,可以看到客户端再次发送确认包(ACK),标志位ACK,将sequence+1,如下图:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息