Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1434911
  • 博文数量: 1334
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 5762
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-25 16:56
文章分类

全部博文(1334)

文章存档

2014年(108)

2013年(1059)

2012年(169)

发布时间:2013-01-18 19:29:58

  现在,我们来看一个完整的流程,在一个TCP socket上系统调用connect究竟是如何建立起一个到对端的连接的。我们还是以实验环境172.16.48.2向172.16.48.1的端口5002发起连接请求为例。    第一步,172.16.48.2向172.16.48.1发起连接请求,发送一个SYN段,指明目的端口5002,通告自己的初始序号(ISN,由协议栈 随机产生的一个32位数),设置确认序号为0(因为还没有收到过对端的数据),通告自己的滑动窗口大小为5840(对端是5792,这似乎有问题,有待进 一步细查),窗口扩大因子为2(在......【阅读全文】

阅读(168) | 评论(0) | 转发(0)

发布时间:2013-01-18 19:29:52

  TCP提供的是一种面向连接的,可靠的字节流服务,TCP提供可靠性的一种重要的方式就是MSS。通过MSS,应用数据被分割成TCP认为最适合发送的数 据块,由TCP传递给IP的信息单位称为报文段或段(segment)。代表一个TCP socket的结构体struct tcp_sock中有多个成员用于确定应用数据被分割成最大为多大的数据块较为合适(最大报文段长度MSS)。    我们不难联想到,跟最大报文段长度最为相关的一个参数是网络设备接口的MTU,以太网的MTU是1500,基本IP首部长度为20,TCP首部是20,所以MSS的值可达1460(......【阅读全文】

阅读(286) | 评论(0) | 转发(0)

发布时间:2013-01-18 19:29:48

  TCP协议发送和接收数据报的过程还是相当的复杂的,这里,我们在完成TCP三次握手协议后,试图避开各种复杂的因素,介绍一个最为简单的TCP数据报发送流程。    跟UDP,RAW类似,函数mytcp_sendmsg负责发送TCP数据报。首先,要确定最大报文段(MSS)的长度,因为TCP需要把应用数据分割成它认为最为合适的数据块大小,然后传给IP,而不需要IP层再去进行数据报分割,我们得到的MSS是1448。    接下来我们要进行应用数据的分割,关于应用数据的结构体struct msghdr *msg的介绍,请查阅前面的文......【阅读全文】

阅读(178) | 评论(0) | 转发(0)

发布时间:2013-01-18 19:29:45

前面我们看到,建立一个TCP连接需要三次握手(SYN, SYN+ACK, ACK)。而终止一个连接要经过4次握手,下面我们会看到,严格来讲,是两个两次握手,即A端告知B端它终止从A端到B端的连接,即A端不会再往B端发送 数据了(通过向B端发送一个FIN标志)。A端的关闭即告完成,此时,我们说A到B的这条TCP连接处于半关闭状态(half-close)。    但这时,B端还是可以向A端发送数据的,B端可以在将来的任一时间内向A端发送FIN来完成它这端的半关闭。此时,A端的socket可能已经不存在(超 时删除),但A主机的TCP/IP协议栈中有一个......【阅读全文】

阅读(172) | 评论(0) | 转发(0)

发布时间:2013-01-18 19:29:42

前面我们讲到在实验环境中,主机1已经给主机13发送了FIN数据报的应答。该应答数据报相当简单,就只有一个ACK标志,而且它不占用序号。下面我们看看,13如何处理这个应答数据报的。    前面我们看到,13上的socket当前已处于TCP_TIME_WAIT1状态。收到FIN应答后,socket将状态标为 TCP_TIME_WAIT2,表示自己这边的半关闭已完成,开始等待对方的半关闭。同时将socket的成员sk_shutdown标为 SEND_SHUTDOWN,表示是执行主动关闭。    接下来, socket进入一个超时......【阅读全文】

阅读(171) | 评论(0) | 转发(0)
给主人留下些什么吧!~~
留言热议
请登录后留言。

登录 注册