TCP/IP协议

1.首先什么是tcp\ip协议?

要学习它,我们先要了解它是什么。

概念:TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

什么是面向连接?

一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

下边是结合对比udp协议,对面向连接有更加深刻的理解:

1,TCP是面向连接(Connection oriented)的协议,UDP是无连接(Connection less)协议;
以下举例进行说明:
对于面向连接的: 两个人打电话时,双方确认并建立连接后才能进行通信。
对于面向无连接的:在邮局寄信时,你只需要将信放在邮筒里,不需要给收件人通知,收件人也不知道你给他寄信了。

可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;相比于TCP而言,UDP并不是可靠传输,因为,UDP并不是面向连接的。并不确定对方能不能收到。

1.既然TCP是可靠的,那么我们就需要了解TCP保证可靠性的机制

当出现以下情况时会进行重传:
1,数据报传输中途丢失
2,接收端的ACK确认报文在传输中途丢失
3,接收端异常未响应ACK或被接收端丢弃

  1. TCP重传机制:
    1,超时重传机制;
    2,快速重传机制;
    3,SACK 方法;
    4,Duplicate SACK – 重复收到数据的问题

字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃。

感觉这个面向字节流有点模糊,面向字节流就是将程序看作是一连串无结构的字节流。与面向报文的UDP相对比。

这样又引出了另外一个概念:有序无序

  1. TCP无界,UDP有界;
    TCP通过字节流传输,即TCP将应用程序看成是一连串的无结构的字节流。每个TCP套接口有一个发送缓冲区,如果字节流太长时,TCP会将其拆分进行发送。当字节流太短时,TCP会等待缓冲区中的字节流达到一定程度时再构成报文发送出去,TCP发给对方的数据,对方在收到数据时必须给矛确认,只有在收到对方的确认时,本方TCP才会把TCP发送缓冲区中的数据删除。
    而UDP传输报文的方式是由应用程序控制的,应用层交给UDP多长的报文,UDP照样发送,既不拆分,也不合并,而是保留这些报文的边界,即一次发送一个报文。
    有界与无界之分是根据接收报文来划分的,对于TCP协议,客户端连续发送数据,只要服务端的这个函数的缓冲区足够大,会一次性接收过来,即客户端是分好几次发过来,是有边界的,而服务端却一次性接收过来,所以证明是无边界的;
    而对于UDP协议,客户端连续发送数据,即使服务端的这个函数的缓冲区足够大,也只会一次一次的接收,发送多少次接收多少次,即客户端分几次发送过来,服务端就必须按几次接收,从而证明,这种UDP的通讯模式是有边界的。
  2. TCP有序,UDP无序;消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。

 1.面向字节流传输,就是TCP将数据看成是一连串无结构的字节流。每个TCP的套接口都有一个缓冲区,但字节流的长度太长时,TCP会将其拆分进行发送,如果字节流太短,就会等到缓冲区字节流长度达到一定长度再进行发送。因为拆分之后的数据可能会不按照发送的先后顺序到达,因此,再服务端接收到数据之后,会对其进行排序。        

2.TCP是面向连接的编程,所以每次发送的数据多少可以自己决定,即使每次不是发送完整的数据报,也是可以按照一定的顺序拼接起来的。但是由于UDP不是面向连接的,只需要知道对方主机的ip和端口号,就可以进行数据报的传输,因为不是面向连接的,所以每次都要发送完整的数据报,避免很多个主机都向同一个服务端发送数据,导致拼接乱套。

3.TCP既然是可靠传输,那么TCP就必须采取一系列的措施来保证数据传输的可靠性。

3.1.重传机制

3.2.TCP有流量控制(拥塞控制),UDP没有;流量控制:TCP利用滑动窗口机制在TCP连接上实现对发送方的流量控制, 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。
当出现网络抖动时,TCP会自觉降低发送速度,他会努力维护次序,但udp依然保持速度不变

4.既然TCP是可靠传输,那么TCP传输数据的速度肯定是没有UDP协议快的。需要可靠传输的场合:发送邮件、远程登陆、文件传输,相比之下:UDP可以使用在面向在线视频的场景。效率要求较高

5.传输通信:两个协议是进程间通信,也就是说应用间的通信,那么如何在众多程序中找到自己的目的应用呢?在传输层,使用端口号来识别同一台计算机中进行通信的不同应用程序。
一般情况下可以根据“源IP地址”、“目标IP地址”、“源端口号”、“目标端口号”来进行识别一个通信,但是有些特殊情况,比如IP地址和端口号都一样,只是使用的传输协议不一样,怎么进行区分?数据到达IP层(网络层)之后,会先检查IP头部的协议号,然后再传给相应协议的模块。(那么多层,可定是有办法识别的。)因此,TCP/IP或UDP/IP通信中通常使用5个信息来识别一个通信:“源IP地址”、“目标IP地址”、“源端口号”、“目标端口号”以及“协议号”。(知名端口号与传输层协议没有关系,例如53端口在TCP、UDP中都用于DNS服务)

6.TCP有流量控制(拥塞控制),UDP没有(这应该是由于UDP不可靠,更加关注速度导致的);流量控制:TCP利用滑动窗口机制在TCP连接上实现对发送方的流量控制, 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。
当出现网络抖动时,TCP会自觉降低发送速度,他会努力维护次序,但udp依然保持速度不变

 说了这么多,就是为了解释TCP概念。并针对TCP的特性设计很多机制。

1.数据方面,发送,接受

  • #什么是 TCP 连接?

 总结一句话,就是目标IP负责定位主机,目标端口,负责去顶发给哪个端口号。因为TCP\IP协议是进程之间的通信,也就是应用之间的通信协议。所以TCP头部负责找具体哪个应用。

 

命令尝试: 

 

 

 

  • 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
  • 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和
  • 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包。

 

4.17 如何基于 UDP 协议实现可靠传输? | 小林coding 

        

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值