码迷,mamicode.com
首页 > 其他好文 > 详细

关于TCP/IP协议

时间:2016-10-01 19:17:29      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

TCP的特点:

TCP是面向连接的传输层协议

TCP的传输是可靠传输

TCP是全双工的通信

TCP的连接是点对点的传输

 

TCP和UDP的区别

  • tcp是面向连接的,两台主机的通信之前必须通过三次握手建立连接;而UDP是不需要建立连接的
  • TCP提供的是可靠传输,TCP通过确认和重传机制来保证传输的质量,而UDP没有。所以TCP没有丢包而UDP有丢包的现象
  • TCP提供了拥塞控制和和滑动窗口等来保证传输的质量,UDP没有
  • TCP只能是点对点的传输,UDP可以支持一对一、一对多、和多对多的通信
  • TCP适用于传输大量的数据对可靠性要求高的环境,UDP适用于追求效率和对可靠性不高的环境
  • TCP的头部最小为20个字节,UDP的头部为8个字节
  • TCP面向的是字节流服务,UDP面向的是报文服务

 

TCP报文结构

技术分享

源端口和目的端口各占2个字节

序号占4个字节

确认号占4个字节

数据偏移、保留和窗口共同占有4个字节

检验和、紧急指针共同占有4个字节

以上的这些共同构成TCP头部的固定首部

再加上可选的选项和填充构成TCP的首部

TCP报文由TCP首部和传输的数据组成

 

TCP的三次握手

技术分享

第一次握手:客户端发送syn(syn=x)请求包到服务器,进入syn_send状态

第二次握手:服务器收到客户端发来的syn包,确认客户的syn包(ack=syn+1),然后再发送请求包syn(syn= y)到客户端,所以就发送的是ACK+SYN包给客户端,进入syn_recv状态

第三次握手:客户端接收到服务器发来的ack+syn包,确认服务器的syn包(ack = syn+ 1),发送ack包,进入established状态

三次握手建立连接之后,才开始发送数据,若没有断开连接,则连接将会一直进行下去

 

若TCP只进行两次握手不进行三次握手可以吗?

不可以,采用三次握手是为了防止失效的连接请求报文段突然又发送给服务器,产生错误。

如下场景:若客户端发送了一个请求给服务器,但是因为网络时延等问题请求包迟迟没有到达服务器,过了一段时间后,客户端重新发送了一个请求,服务器接收到了发送确认并建立了连接。在通信之后,断开连接。但是原来第一个请求包又重新发给了服务器,服务器收到了就发送给客户端一个确认,但是实际上客户端并没有发送请求,所以不会理会。这样服务器就一直等待客户端发送数据,造成服务器资源浪费。

 

TCP的四次挥手

技术分享

第一次挥手:客户端发送一个fin(fin = x)包,告诉服务器不会再发送数据到服务器了,但此时客户端还是可以继续发送和接收数据

第二次挥手:服务器收到客户端发来的断开连接的请求,确认发送一个ack包(ack= x+1),此时客户端只能接收数据不能发送数据

第三次挥手:当服务器发送完数据之后,就会发送一个断开连接的请求fin包(fin = y),告诉客户端“我的数据也发送完了”

第四次挥手:当客户端收到服务器发来的断开连接的请求时,确认发送一个ack包(ack = y+1),这时双方都断开连接,不能再收发数据

 

TCP流量控制:

TCP拥塞控制:

 

关于TCP/IP协议

标签:

原文地址:http://www.cnblogs.com/sker/p/5926049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!