TCP协议理解和用法以及三次握手四次分手

TCP协议

1. TCP网络分层

应用层,传输层,网络互联层,网络访问层,物理层

应⽤层

应⽤程序之间如何相互传递报⽂,⽐如HTTP协议

传输层

传输层的作⽤是为两台主机之间的“应⽤进程”提供端到端的逻辑通信,⽐如TCP协议

⽹络互连层

⽹络互连层提供了主机到主机的通信,将传输层产⽣的的数据包封装成分组数据包发送到⽬标主机,并 提供路由选择的能⼒。 IP 协议是⽹络层的主要协议,TCP 和 UDP 都是⽤ IP 协议作为⽹络层协议。这⼀层的主要作⽤是给包加 上源地址和⽬标地址,将数据包传送到⽬标地址。

⽹络访问层

⽹络访问层也有说法叫做⽹络接⼝层,以太⽹、Wifi、蓝⽛⼯作在这⼀层,⽹络访问层提供了主机连接 到物理⽹络需要的硬件和相关的协议

分层的好处

● 各层独⽴:限制了依赖关系的范围,各层之间使⽤标准化的接⼝,各层不需要知道上下层是如何⼯ 作的,增加或者修改⼀个应⽤层协议不会影响传输层协议
● 灵活性更好:⽐如路由器不需要应⽤层和传输层,分层以后路由器就可以只⽤加载更少的⼏个协议 层
● 易于测试和维护:提⾼了可测试性,可以独⽴的测试特定层,某⼀层有了更好的实现可以整体替换 掉
● 能促进标准化:每⼀层职责清楚,⽅便进⾏标准化

2. TCP三次握手

1.客户端需要向服务端发送一个seq的请求
2.服务端返回客户端一个确认收到
3.客户端再回复服务端连接成功

为什么不能是两次或者三次?

如果是两次的话,服务端会单纯的认为接收到请求后默认连接已经建立,而客户端不管连接建立成功不成功,都不再管,TCP是一个面向双方连接的一个过程,如果只是单纯的一方连接成功,将会是一个资源的浪费。

在这里插入图片描述

3.TCP四次挥手

三次握手后,建立连接,然后进行四次挥手
1.客户端向服务端发送断开请求
2.服务端响应客户端收到请求
3.服务端向客户端发送断开请求
4.客户端回应服务端收到断开请求

为什么四次挥手不能是三次挥手呢?

如果将下图四次挥手中间的两步合成为一步。
客户端发送断开请求,服务端接受成功,假如服务端还没有处理完任务,需要一分钟或者三分钟才会返回,那么客户端会有一个超时机制,超过设定时间后没有接收到返回,会默认为网络连接有问题,会一直进行重发,造成连接资源的浪费。

在这里插入图片描述

4.什么是半连接队列?什么是SYN Flood攻击?

客户端⼤量伪造 IP 发送 SYN 包,服务端回复的 ACK+SYN 去到了⼀个「未知」的 IP 地址,会造成服务端大量的连接都处于等待状态,⽽服务器的半连接队列⼤⼩也是有限的,如果半连接队列了满,就会出现⽆法处理正常请求的情况。
在这里插入图片描述

5.TCP的keep-alive原理

⼀个 TCP 连接上,如果通信双⽅都不向对⽅发送数据,那么 TCP 连接就不会有任何数据交换。 假设应⽤程序是⼀个 web 服务器,客户端发出三次握⼿以后故障宕机或被踢掉⽹线,对于 web 服务器 ⽽已,下⼀个数据包将永远⽆法到来,但是它⼀⽆所知。
TCP 协议的设计者考虑到了这种检测⻓时间死连接的需求,于是乎设计了 keepalive 机制。 它的作⽤就是探测对端的连接有没有失效,通过定时发送探测包来探测连接的对端是否存活,不过默认 情况下需要 7200s 没有数据包交互才会发送 keepalive 探测包,往往这个时间太久了,我们熟知的很多组件都没有开启 keepalive 特性,⽽是选择在应⽤层做⼼跳机制。

6.TCP的端口号

TCP ⽤两字节的整数来表示端⼝,⼀台主机最⼤允许 65536 个端⼝号的。
熟知端⼝号:范围0~1023
● HTTP:80
● HTTPS:443
● SSH:22 已登记的端⼝号:范围1024~49151
● MySQL:3306
● Redis:6379
● MongoDB:27017
临时端⼝号:范围49152~65535

7.telnet的用法

检查端口是否打开
telnet 的⼀个最⼤作⽤就是检查⼀个端⼝是否处于打开,使⽤的命令是 telnet [domainname or ip] [port],这条命令能告诉我们到远端 server 指定端⼝的⽹连接是否可达。
如: telnet 127.0.0.1 8080

8.netstat的⽤法

netstat 命令⽤于显示各种⽹络相关信息

常⻅参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建⽴相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进⾏统计
-c 每隔⼀个固定时间,执⾏该netstat命令

9.TCP和UDP的区别

TCP是⼀个⾯向连接的、可靠的、基于字节流的传输层协议。
⽽UDP是⼀个⾯向⽆连接的传输层协议
⾯向连接
所谓的连接,指的是客户端和服务器的连接,在双⽅互相通信之前,TCP 需要三次握⼿建⽴ 连接,⽽ UDP 没有相应建⽴连接的过程。
可靠性
TCP 花了⾮常多的功夫保证连接的可靠,这个可靠性体现在哪些⽅⾯呢?
1)TCP有状态:TCP 会精准记录哪些数据发送了,哪些数据被对⽅接收了,哪些没有被接收到,⽽且保 证数据包按序到达,不允许半点差错
2)TCP可控制:意识到丢包了或者⽹络环境不佳,TCP 会根据具体情况调整⾃⼰的⾏为,控制⾃⼰的发 送速度或者重发

10.设计通讯聊天工具想法

登陆采⽤TCP协议和HTTP协议,你和好友之间发送消息,主要采⽤UDP协议,内⽹传⽂件采⽤ 了P2P技术。
总来的说:
1.登陆过程,客户端client 采⽤TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之 后,会有⼀个TCP连接来保持在线状态。
2.和好友发消息,客户端client采⽤UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息 的可靠,采⽤上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可 重新发送。
3.如果是在内⽹⾥⾯的两个客户端传⽂件,QQ采⽤的是P2P技术,不需要服务器中转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无奈的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值