UDP与TCP的网络原理

UDP协议

udp协议端格式

由上图可以看出,一个UDP报文最大长度就是65535. 

• 16位长度,表示整个数据报(UDP首部+UDP数据)的最大长度(注意,这里的16位UDP长度只是一个标识这个数据报长度的字段,并不是这个数据报传输的数据)

• 如果校验和出错,就会直接丢弃。

        校验和通过网线传输时,电信号使用高低电平来表示0和1.。但是,如果外部环境干扰,就有可能导致低电平->高电平,高电平->低电平,造成比特翻转=>数据就传输错了。校验和就是通过数据报中的数据内容通过计算得到的。值得注意的是:如果校验和不对,此时你的数据一定不对,如果校验和对,但是数据也有一定概率是错误的

        面向数据报:应用层交给UDP长的报文,UDP原样发送,既不会拆分,也不会合并。

用UDP传输100个字节的数据报:

  • 如果一次发送端发送100个字节,那么接收端也必须一次接收100个字节;而不能循环10次接收,每次接收10个字节

缓冲区:UDP只有接收缓冲区,没有发送缓冲区

  • UDP没有真正意义上的发送缓冲区,发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;
  • DUP具有接收缓冲区,但是这个接收缓冲区不能保证收到的DUP报的顺序和发送DUP报的顺序一致;如果缓冲区满了,再到达的DUP数据就会被丢弃;

TCP协议

TCP协议端格式

TCP原理

确认应答机制:

TCP将每个字节的数据都进行了编号。即位序列号

发送方的序号为最后一个字节的编号,确认序号为无意义的数据

接收方的序号和发送方的序号无关,确认序号为接收数据的序号+1

(在接收缓冲区中,优先级队列通过序号来确定数据的先送后发的顺序)

接收方就可以通过ack的确认序号,告诉发送方那些数据已经收到了

超时重传机制

主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;

如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会重发。

但是,主机A未收到B发来的确认应答,也可能是因为主机B收到了数据,但是ACK丢失了;

        因此若ACK丢失了,主机B会收到很多重复数据。那么TCP协议需要能够识别哪些包是重复的包,并且把重复的丢弃掉。这时候我们就可以利用前面提到的序号来达到去重的效果。

  • 超时重传后,重复发送的数据报仍可能会丢失,TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态的计算这个最大超时时间。
  • 如果重发一次,仍得不到应答,TCP就会将这个超时时间延长后再重发,在不停的延长超时时间后,当累积到一定的重传次数后,TCP就会重置连接,如果重置连接失效,TCP就会关闭连接,放弃网络通信。

 主机掉电(把电源)
瞬间机器就关了,来不及进行任何挥手操作。此时分两种情况:

1)对端是发送端

对端就会收不到ack=>超时重传=>重置连接=>释放连接

2)对端是接收端

对端是没法立即知道,你这边是还没来得及发新的数据,还是直接没了。即使发送端没有写入操作,TCP自己也内置了一个保活机制“心跳包”。虽然是接收端,但是接收端会定期给发送端发送一个心跳包(ping),正常情况下就会返回一个(pong),如果每个 ping 都有及时的 pong,这个时候就说明当前对端的状态良好,如果 ping 过去之后,没用 pong ,说明心跳没了,这边怕是打概率挂了(pong也有概率丢的,因此会连续几次都丢了才会判定连接断开)。

注:发送方也是有心跳包的,但是通过对方返回的ack来判定会更快一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值