志在指尖
用双手敲打未来

tcp连接(tcp连接的建立过程)

tcp连接

一、实验目的
实验1_1:
使用Freebsd/Linux操作系统下的C编译器和网络程序的调试方法,掌握TCP连接建立和终止以及调整缓冲区大小的方法。
实验1_2:
使用ethereal/TCPDump等抓包工具,截取TCP建立过程中产生的数据包,分析连接建立过程。
二、实验环境
操作系统:Ubuntu10.04系统
编辑器:vim
网络环境:PC1:Ipv4地址10.3.1.210
PC2:Ipv4地址10.3.1.211
两台电脑在同一个网段,可以互相通信,能ping通。
代码语言:c语言
代码编译器:gcc编译器
三、实验内容
1.设计思路
该实验分为两部分:Tcp通信的连接以及利用tcpdump进行抓包,从抓包的内容分析Tcp进行连接的过程。
第一部分:Tcp连接的建立
Server端:
思路:需要定义两个socket,一个用于监听,一个用于接受客户端传来的socket。定义ipv4地址参数,指定Ip地址和端口号。然后进行bind,bind成功后进行对指定socket的监听。当有客户端进行连接请求时,accept函数会接收到来自Client端的socket。然后Server将输出Client端相关信息,例如Ip地址或是端口号等,在向客户端buffer流写入欢迎信息。最后关闭连接。
Client端:
思路:定义一个char字符数组,用于接受服务器端,传来的信息。定义一个socket,然后定义指定服务器端Ipv4地址以及端口号。然后client端主动进行connect连接。连接成功后,接受Server端写入的信息,然后逐一读出,并打印在屏幕上。
第二部分:抓包
利用tcpdump抓包工具,进行抓包,然后查看抓包内容。通过截取TCP建立过程中产生的数据包,分析连接建立过程。tcp

tcp连接的建立过程

1.TCP连接建立
让主机B运行一个服务器进程。它发出一个被动的open命令,告诉它的TCP准备接收来自客户端进程的连续请求。服务器进程处于监听状态。不断地检测是否有客户流程发起了持续的请求,如果有的话就响应。让客户端进程在主机A中运行,它首先向自己的TCP发出一个主动的open命令,表示它想要建立一个到某个IP地址的端口的传输连接。流程如下:
1)TCP主机发送一个连接请求消息段TCP主机b.同步位SYN的第一部分段应设置为1,和序列号X选择同时,表明第一个数据字节的序号在随后的数据传输是X。
2)当主机B的TCP接收到连接请求消息段时,如果同意,则播放确认。在确认消息段中,SYN应该设置为1,确认号应该是X+1,您还应该为自己选择一个序列号Y
3)主机A的TCP收到此消息段后,应将A确认给B,B的确认号为Y+1
4)主机A的TCP通知上层应用程序进程连接已经建立。当主机B的TCP收到主机A的确认时,它还通知上层应用程序进程连接已经建立。
2.释放TCP连接
数据传输完成后,通信双方可以发出释放连接的请求。释放连接的过程如图所示:
1)数据传输结束后,主机A的应用进程会先发出A请求,释放与其TCP的连接,而不是发送数据。TCP将主机B的TCP段开头的终止位FIN设为1,通知另一方A和B的连接即将解除。序号U等于所传输数据的最后一个字节的序号加1。
2)主机B的TCP接收到连接释放通知,并发出序列号为U+1的确认,通知应用进程,使A与B之间的连接被释放,连接处于A半关闭状态。主机B没有接收主机A的数据;但是,主机B也向主机A发送数据,如果数据被正确接收,主机A仍然需要发送确认。
3)主机B向主机A发送数据后,应用进程通知TCP释放连接。主机B发送的连接释放段必须设置终止位为1,序列号W等于之前发送的数据的最后一个字节的序列号加1,并且必须重复上次发送的ACK=U+1。
4)主机A确认主机B的连接释放段,设置ACK为1,ACK=W+1,SEQ=U+1。这样,从B到A的反向连接就被释放了,主机A的TCP向其应用程序进程报告整个连接已经被释放。
3.需要注意的问题
当三次握手建立连接时,发送方再次发送必要性的确认
主要目的是防止超时的连接请求段突然发送给B,导致错误。假设有一个异常,即A发送的第一个连接请求段没有丢失,而是在一些网络节点上延迟了很长时间,直到释放连接后到达B,这将是一个很长的过期段。但是,当B收到无效的连接请求段时,误以为A已经发出了一个新的连接请求,于是向A发送了一个确认段,同意建立连接。假设没有使用三次握手,B发送确认后,一个新的连接就建立了,等待A发送数据,B的大量资源被浪费了。
四波释放连接时等待2MSL的意思
首先,为了保证A发送的ACK段最多能够到达B,可能会导致ACK段丢失,导致B处于last-ACK状态,无法收到已经发送的FIN段和ACK段的确认。B会随着时间的推移重发FIN和FIN报文段,A会在2MSL内收到重发的ACK+FIN报文段。然后A再次发送确认。
二是防止上述无效的连接请求段出现在此连接中。在发送了最多的ACK段后,A可以使这个连接期间产生的所有消息段在另一个2MSL之后从网络中消失。

未经允许不得转载:IT技术网站 » tcp连接(tcp连接的建立过程)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载