Chinaunix首页 | 论坛 | 博客
  • 博客访问: 278642
  • 博文数量: 28
  • 博客积分: 690
  • 博客等级: 上士
  • 技术积分: 860
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-24 13:52
文章分类

全部博文(28)

文章存档

2012年(28)

分类: 系统运维

2012-09-19 09:46:26

TCP 3次握手

客户端向服务器发送一个SYN(包含了SYNSEQ)。

当服务器接收到客户端发过来的SYN时,会向客户端发送一个SYN+ACK的数据包,其实ACKack等于上一次发送SYN数据包的(SYN+SEQ)。

当客户端接收到服务器发送过来的SYN+ACK数据包时,当接收到后向服务器发送ACK的数据包,此时ACK数据包中的ack值等于上一次SYN中的seq+syn

当服务器收到了客户端的发送过来的ACK数据包时,确认无误后,向客户端发送数据。

为什么要3次握手

防止已过期的连接请求报文突然又传送到服务器,因而产生错误。

Client发生一个请求连接报文可能因为网络延迟等原因,没有送达到server中。但是当这个client的请求报文送达到server时,如果没有三次握手的话,server就会直接发数据可client,这样会导致server资源的浪费。

解决网络中存在延迟的重复分组的问题

在不可靠信道上可靠地传输信息

因为TCP是一个可靠的协议,但是IP是一个不可靠的协议,利用TCP使IP传输过程变得可靠。这样的话,如果发生丢包,传输顺序出错等问题,TCP协议都可以解决。为了满足不可靠信息在可靠的传输信息。

那就是可以这样说,确认c/s是不是相应的服务都准备好了,只有通过了3次握手才能直接传输数据并且满足了数据可靠性的传输。

http://www.cnblogs.com/xpress/

 

 

TCP 4次挥手

先由客户端向服务器端发送一个FIN,请求关闭数据传输。

当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ

然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。

当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ

为什么要4次挥手?

确保数据能够完成传输。

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

阅读(10980) | 评论(3) | 转发(3) |
给主人留下些什么吧!~~

windman5212012-10-05 22:02:31

alan91012012-09-28 16:13:21

windman521: 谁告诉你的“客户端采用大于1024的任一端口向服务器发送一个SYN”?.....
不好意思写错了

windman5212012-09-28 13:29:27

谁告诉你的“客户端采用大于1024的任一端口向服务器发送一个SYN”?