您当前的位置:首页 > 计算机 > 网络通信

❥TCP、UDP、HTTP带你玩个明白,适合初学者⚡⚡

时间:06-20来源:作者:点击数:

简介

本文章是我自己在自学网络方面所记录的笔记,现在分享给大家,有不懂或没学过的以及想学习了解网络这方面的知识的猿友们,可以耐心的看看这篇文章,主要讲解TCP、UDP、HTTP三个协议。

TCP

TCP的三次握手

握手是为了建立连接,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

TCP的Flags

Flag 说明
URG 紧急指针标志
ACK 确认序号标志
PSH push标志
RST 重置连接标志
SYN 同步序号,用于建立连接过程
FIN finish标志,用于释放连接

TCP的主要流程详解

流程图
主要流程

第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到武器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHEN(established)状态,完成 三次握手。

为什么需要三次握手才能建立起连接?

为了初始化Sequence Number的初始值。

首次握手的隐患----SYN超时的原因及防护措施。

问题起因分析:

Server收到Client的SYN。回复SYN-ACK的时候未收到ACK确认,Server不断充实直至超时,Linux默认等待63秒才断开连接。Liunx默认重发次数为5次,重发次数时间翻倍。

1s-->2s-->4s-->8s-->16s:31s;第五次还需要等待32s。

针对SYN Flood 的防护措施:

SYN队列满后,通过tcp_syncookies参数回发SYN Cookie(原地址端口+目标地址端口+时间戳),Sequence Number简称SYN Cookie。

若为正常连接则Client会回发SYN Cookie,直接建立连接。

建立连接后,Client出现故障怎么办?

保活机制:向对方发送保活探测报文,如果未收到相应则继续发送尝试次数达到保活探测数仍未收到响应则中断连接。

TCP四次挥手

挥手是为了终止连接。

流程图
主要流程

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为 收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态;

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么会有TIME_WAIT状态?

原因:

确保有足够的时间让对方收到ACK包;

避免新旧连接混淆。

为什么需要四次握手才能断开连接?

因为全双工,发送方和接受方都需要FIN报文和ACK报文

服务器出现大量CLOSE_WAIT状态的原因是什么?

对方关闭socket连接,我方忙于读或写,没有及时关闭连接。

检查代码,特别是释放资源的代码

检查配置,特别是处理请求的线程配置

TCP的滑动窗口

RTT和RTO:

RTT:发送一个数据包到收到对应的ACK,所花费的时间

RTO:重传时间间隔,通过RTT计算出来的

TCP使用滑动窗口做流量控制与乱序重排:

保证TCP的可靠性

保证TCP的流控特性

窗口数据的计算过程:

AdvertisedWindow = MaxRcvBuffer - (LastByteRcvd - LastByteRead)

EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)

UDP

UDP的报文结构

UDP的特点

1.面向非连接

2.不维护连接状态,支持同时向多个客户端传输相同的消息

3.数据包报头只有8个字节,额外开销较小

4.吞吐量只受限于数据生成速率、传输速率以及机器性能

5.尽最大努力交付,不保证可靠交付,不需要维持复杂的连接状态表

6.面向报文,不对应用程序提交的报文信息进行拆分或者合并

TCP和UDP的区别

面向连接VS无连接

可靠性VS不可靠

有序性VS不具备有序性

速度比较慢(创建连接,保证消息的可靠性、有序性)VS速度快

重量级(元数据的头部大小20个字节)VS轻量级(8个字节)

HTTP

超文本传输协议HTTP主要特点:

支持客户/服务器模式

简单快速

灵活

无连接(限制每次连接只出一个请求)

无状态(对于事务处理能力没有记忆)

HTTP请求结构

请求/响应的步骤

1.客户端连接到WEB服务器

2.发送HTTP请求

3.服务器接受请求并返回HTTP响应

4.释放连接TCP连接

5.客户端浏览器解析HTML内容

在浏览器地址栏键入URL,按下回车之后经历的流程?

会基于URL逐层查询DNS服务器缓存,解析URL中的域名所对应的IP地址,DNS缓存从近到远:浏览器缓存-->系统缓存-->路由器缓存-->IPS服务器缓存、域名服务器缓存,从哪个缓存中查询出后直接返回。

1.DNS解析

2.TCP连接

3.发送HTTP请求

4.服务器处理请求并返回HTTP报文

5.浏览器解析渲染页面

6.连接结束

HTTP状态码

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

不足之处,可以关注私信沟通,期待技术交流!

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门