持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第33天,点击查看活动详情
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug..
- 掘金LV3用户 juejin.cn/user/bug..
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug..
- 华为云云享专家 bbs.huaweicloud.com/bug..
TCP面试重点
我们看到
TCP协议报文格式比较复杂!
- 源端口:保存请求方服务程序端口号
- 目的端口:保存响应方服务器端口号
- 32位序号:因为TCP是面向字节流传输,TCP对传输的数据按字节顺序进行编号. 例如:我要传输200个字节的数据,然后数据的确认序号为100,说明我是从字节序号为100的数据开始传输传输200长度字节!
- 32位确认序号:就是发送方期待响应方发送已经接收到的字节序号的下一个字节序号(告诉发送方下一次要发送的数据字节开始顺序) 例如:我们发送方从100字节序号发送200个字节数据,接收方接收后,就应该返回301的确认序号给发送方!
- 4位数据偏移(首部长度):也就是tcp的报文头大小这里的单位是4字节,也就是15*4字节= 60字节,协议报头可以有60字节大小 6位保留位:用于后期扩展,保留今后使用,但目前应都位0
- 6位标志位:
>1.紧急URG:当URG位为1时,紧急指针字段有效,表示这个协议报中存在紧急数据需要优先处理
>2.确认ACK:当ACK标志位为1时,确认号字段有效,TCP规定在连接建立之后ACK标志位要置为1
>3.推送PSH:当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1
>4.复位RST:当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;
>5.同步SYN:在连接建立时用来同步序号.当SYN=1,ACK=0时表示发送连接请求报文,当响应方同意建立连接后发送SYN=1,ACK=1给请求方!
>6.终止FIN:用来释放连接,当FIN=1时,表示数据以全部发送请求释放连接!
- 16位窗口:通知接收方,我发送的文本,需要留有多大的空间接收
- 16位校验和:检验接收的首部和数据是否出错!
- 16位紧急指针:指出本协议报文紧急数据的字节数
- 选项:可变长度不像udp报头固定了8字节,tcp留有扩展的余地!
- 填充:用于存放完整应用层的数据载荷
我们通过之前对TCP的学习已经对TCP协议特点有所了解!
- 面向字节流
- 全双工
- 可靠传输
- 有连接
上面的这些特点在我们的套接字编程中TCP中都有所体现,除了可靠传输!
那么TCP是如何保证数据传输的可靠性呢?
TCP原理
TCP协议需要保证传输数据的安全可靠性,还有数据传输的传输效 率!
所以TCP的设计原则:在保证可靠传输的基础下尽可能提高传输效率!
下面是TCP设计的一些原理策略!