网络编程---TCP/UDP/IP头部详解及其可靠性与服务类型详解

本文深入解析TCP、UDP和IP协议的头部结构,探讨它们的服务类型、可靠性以及TCP的流量控制和确认机制。TCP提供面向连接、可靠的字节流服务,而UDP则是无连接、不可靠的数据报服务。IP协议则提供无连接、不可靠的服务。头部中的序号、确认号、窗口大小等字段确保了数据的正确传输。同时,介绍了最大传输单元MTU对IP分片的影响以及避免分片的方法。
摘要由CSDN通过智能技术生成

TCP:面向连接的  可靠的   字节流服务

UDP:无连接的   不可靠的   数据报服务 

关于这个流式服务及可靠性在本次博客会给大家解答,连接性在下篇博客给大家解答

 

TCP/UDP的流式服务与数据报服务说明

TCP流式服务:当发送端应用程序连续执行多次写操作时,TCP模块会先将这些数据放入TCP发送缓冲区中,当TCP模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个TCP报文段发出。所以说,TCP模块发出的TCP报文段的个数与应用程序执行的写操作次数之间没有固定的数量关系;当接收端收到一个或多个TCP报文段后,TCP模块会将他们携带的应用程序数据按照TCP报文段的序号依次放入TCP接收缓冲区中并通知应用程序读取数据,接收端应用程序读取数据可以一次性将接收缓冲区中读取完也可以多分几次读取,取决于用户指定的应用程序读缓冲区的大小。所以说应用程序执行的读操作次数和TCP模块收到的TCP报文段个数之间也没有固定的数量关系。

总的来说:字节流服务就是发送端执行的写操作次数与接收端执行的读操作次数之间没有任何数量关系,即应用程序对数据的发送与接收是没有边界限制的。基于流的数据没有边界(长度)限制,它源源不断的从通信的一端流入另一端。

UDP的数据报服务:UPD是基于报文的,是相对基于流的服务而言。发送端调用了几次write,接收端必须用相同次数的read读完。在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,接收端必须以该报文长度为最小单位将其所有内容一次性读出,否则数据报将会被截断。发送端发送一个数据报如果接收端没有及时执行读操作,数据报并不会丢(亲测),而是在底层保存,可以理解为在内核中有一个接收缓冲区,但是存放的是一个一个的数据报。

总结:数据报服务就是发送端执行的写操作次数等于接收端执行的读操作次数(因为没有缓冲区呀)

ps:对于tcp字节流服务,当发送缓冲区满了,发不下就会send阻塞。另外,当接收缓冲区满的时候,发送端就不会继续往发送缓冲区中发送,那么当接收端将数据读取之后接收缓冲区中有空余区,发送端怎么知道有空余了,它还会继续等待吗?答案是不会的,因为TCP为每一个连接设有一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值