TCP/IP协议

本文详细介绍了TCP/IP五层协议栈,重点讲解了应用层、传输层中的TCP和UDP协议,包括TCP的可靠传输机制、连接管理和滑动窗口,以及UDP的特点。还提及了网络层的IP协议和数据链路层的以太网协议,讨论了IP分包、MTU、MSS以及ARP报文等概念。
摘要由CSDN通过智能技术生成

一、TCP/IP五层协议栈

1、设计一个应用层协议主要包含:

1)明确传输信息          2)明确传输的格式(参考现有模板模板:xml、json、protobuffer……)

1、xml的格式:<标签名>内容</标签名>


2、json的格式

json中表示字符串,单引号或者双引号都可以(类似于SQL)

最后一个键值对后面可以有逗号,也可以没有。

json要求key一定是字符串,因此key 这里的单引号可以省略,除非key中包含了一些特殊符号(像:空格,-……)必须要加上引号


 3、protobuffer的格式:是一种二进制格式的数据

在protobuffer的数据中,不在包含上面的key的名字了,而是通过顺序以及一些特殊符号来区分每个字段的含义,同时再通过一个IDL文件来描述这个数据格式(每个部分是啥意思)IDL只是起到一个辅助来发的效果,并不会真正的进行传输,传输的只是二进制的纯粹的数据

 最知名的应用层协议:HTTP


2、传输层的协议

端口号:是0-65535之间的整数

知名端口号:把0-1024这些端口号给划分出了一些具体的作用

很多网络服务是属于非常常用,非常广泛的服务,为了更好的管理,就给这些服务分配一些专门的端口号

80  http服务器        443 https服务器        22 ssh        23  ftp

 最常见的传输层协议:UDP和TCP

一、关于UDP

使用UDP可能会存在的问题:

因为UDP报文长度是2个字节(范围0-65535就是64K),无法表示一个比较大的数据报

如果要传一个大的数据的解决办法:

方法一:可以在应用层针对大的数据报进行分包(拆成多个部分),然后再通过多个UDP数据报分别发送,这个时候接收方再把收到的几个包重新拼接成完整的数据

方法二:改成TCP,TCP没有长度限制


UDP报头格式:

 校验和:是用来验证网络传输的这个数据是否是正确的


二、【重点】关于TCP

TCP报头格式:

 TCP中的核心机制:有连接、可靠传输、面向字节流、全双工

TCP如何保证可靠传输:

1、确认应答:保证可靠传输的核心机制,关键就是接收方收到消息之后,返回一个应答报文 (ACK acknowledge)表示自己已经收到了

比如说A给B发送了1000个字节,序号是1-1000(意思是TCP报头中的序号是1,报文长度是1000),此时B就给A返回应答报文1001,表明小于1001的数据都已经被B收到了,接下来A再从1001这个序号开始往后进行传递

2、超时重传:相当于对确认应答进行了补充,确认应答是网络一切正常的时候,通过ACK通知发送方我收到了。如果出现了丢包的情况,超时重传机制就要起到效果了

比如说发送消息后消息丢了,或者返回的ACK丢了,使我们认为对方没有接收到消息,此时就会在一段时间之后重新再发一次

为了确保数据不会重复发两次,TCP内部就会有一个去重操作:接收方收到的数据会先放到操作系统内核的“接收缓冲区”中,接收缓冲区可以视为是一个内存空间,并且也可以视为是一个阻塞队列。收到新的数据,TCP就会根据序号来检查这个数据是不是在接收缓冲区中已经存在了,如果不存在就放进去,如果存在直接丢弃,保证应用程序调用socket api拿到的这个数据一定是不重复的

3、【重点!】连接管理:

1)如何建立连接:三次握手

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值