TCP/IP、HTTP详解

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

计算机为了联网,就必须规定通信协议

为了将所有类型的计算机都连接起来,规定了全球通用协议。互联网协议簇(Internet Protocol Suite)

互联网上每个计算机有唯一标识的IP地址,IP地址对应的实际上是计算机的网络接口,通常是网卡。

一、IP协议

IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。

二、TCP协议

TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。

许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。

一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。

端口有什么作用?在两台计算机通信时,只发IP地址是不够的,因为同一台计算机上跑着多个网络程序。一个TCP报文来了之后,到底是交给浏览器还是QQ,就需要端口号来区分。每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

一个进程也可能同时与多个计算机建立链接,因此它会申请很多端口。

如何创建TCP连接,创建连接的时,主动发起连接的是客户端,被动响应连接的叫服务器

由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客户端发起,服务器接收的类似连接的通道,这个连接可以一直保持,http请求是在这个连接的基础上发送的;

“三次握手协议”:

“第三次握手”是客户端向服务器端发送数据,这个数据就是要告诉服务器,客户端有没有收到服务器“第二次握手”时传过去的数据。若发送的这个数据是“收到了”的信息,接收后服务器就正常建立TCP连接,否则建立TCP连接失败,服务器关闭连接端口。由此减少服务器开销和接收到失效请求发生的错误。

那么为什么需要第三次握手呢?我们来看一下,假设一下如果没有第三次握手,而是两次握手后我们就认为连接成功了,那么会发生什么?第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。

譬如发起请求遇到类似这样的情况:客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。

在这里主要介绍一下那6个标志位

URG:紧急指针标志,当为1时表示紧急指针有效,为0则忽略紧急指针

ACK:确认序号标志,为1表示确认号有效,为0表示报文中不含有确认信息,确认号无效

PSH:push标志,当为1时就是让接收方收到该TCP报文的时候不进入缓冲区排队而是快速发给应用程序

RST:重置连接标志,当连接出现错误时可以重置,或者用于拒绝非法的报文段和连接请求

SYN:同步序号,用于建立连接过程

FIN:finish标志,用于释放连接

 (注:seq代表序号,ack代表确认号)

第一次握手:当客户端需要去建立连接时,客户端就会发送SYN包(seq=x)到服务器,然后客户端进入SYN_SEND的状态,代表已经发SYN包过去,并且在等待服务器确认。此时ACK=0,SYN=1.,这时候由于才第一次握手,所以没有ACK标志

第二次握手:服务器收到SYN包,就会进行确认,由上面的标志位介绍我们可以知道SYN是表示同步序号,这时候会使得确认号=序号+1,即ack就会等于x+1,然后服务器也会像客户端发送一个SYN包(seq=y),这时候也就是服务器会发送SYN+ACK包,来表示服务器确认到了客户端的一次握手并且二次握手建立,此时服务器进入SYN_RECV状态。此时SYN=1,ACK=1,这时候由于是第二次握手,所以就会有一个服务器给客户端的确认标志。

第三次握手:客户端收到服务器的SYN+ACK包,然后就会像服务器发送确认包ACK(ack=k+1)和SYN(seq=x+1),等到这个包发送完毕之后客户端和服务器就会进入ESTABLISHED状态,完成三次握手,而后就可以在服务端和客户端之间传输数据。此时SYN标志位已经不需要,因为当我们发送ACK标志位的时候代表三次握手成功,已经建立完连接了,接下来可以传送数据过去了。

既然都有SYN包那为什么还要ACK来确认呢?SYN是同步序号,当 SYN=1 而ACK=0 时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使 SYN=1 和 ACK=1。因此SYN置1就表示这是一个连接请求或连接接受报文。而ACK状态是用来确认是否同意连接。也就是传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

当TCP三次握手完之后,就代表连接已经建立完成,那么连接断开又是怎么样的呢?

"四次挥手协议":

当在传送完数据之后,客户端会和服务端之间有四次握手

第一次握手:客户端发送一个FIN和序号过去(seq=u),用来表示客户端和服务端之间有关闭的请求,同时关闭客户端到服务端的数据传送,客户端就进入FIN_WAIT_1的状态。

第二次握手:服务端收到FIN=1的标志位时,就会发送一个ACK标志位代表确认,然后确认序号就变成了收到的序号加1,即ack=u+1(FIN和SYN在这点上相同,但是作用不一样)这时候服务端进入CLOSE_WAIT状态,这是一个半关闭状态。只能服务端给客户端发送数据而客户端不能给服务端发送数据。

第三次握手:这次握手还是由服务端发起,这是服务端在传完最后的数据(没有就不传)就会发送一个FIN=1和ACK=1,且序号seq会改变(没有传数据则不变),而ack不变。这时候服务端就会进入LAST_ACK状态,表示最后确认一次。

第四次握手:客户端在接收到FIN之后,就会进入TIME_WAIT状态,接着就发送一个ACK和seq=u+1,ack=w+1给服务端,这时候服务端就会进入CLOSED状态。而客户端进入TIME_WAIT状态的时候必须要等待2MSL的时间才会关闭

为什么会有TIME_WAIT状态呢?(MSL:网络中数据报文存在的最大时间)

1、TIME_WAIT状态可以确保有足够的时间让对方接收到ACK包,如果ACK没有到达,在传输的过程丢失了或者一些其他原因,这样就可以让客户端重发ACK包。如果客户端直接关闭了,那么就有可能导致服务端在一些情况下没有接收到ACK包而无法与客户端断开连接。这样客户端发送ACK包到服务端,服务端请求重发,一来一回就正好是2MSL

2、保证迟来的TCP报文段有足够的时间被识别并丢弃,linux 中一个TCPport不能打开两次或两次以上。当client处于time_wait状态时我们将无法使用此port建立新连接,假设不存在time_wait状态,新连接可能会收到旧连接的数据。

服务器出现大量COLSE_WAIT状态的原因?这时候很可能是因为程序中在收到FIN=1的TCP报文后,由于忙于读或者写,没有去及时发送FIN回来,也就是无法及时关闭连接。这时候需要着重检查释放资源的代码和处理请求的线程配置,有可能是代码中有资源没有被释放掉,也有可能是线程池中的线程数不合理等等

新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

HTTP、TCP网络协议知识整理

git原文不定期更新地址:https://gitee.com/H_david/interview-record/tree/master/src/need_learn/theoretical_knowledge/Http TCP/IP四层网络模型 TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在对各不同网络间实现信息传输的协议簇。 TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个有F

一包大豫竹的博客 1535

计算机原理---什么叫协议?主流协议族TCP/IP协议与HTTP协议的联系及区别

简介 现在Internet(因特网)使用的主流协议族是TCP/IP协议族,它是一个分层、多协议的通信体系。简单说一下TCP/IP协议族体系结构以及主要协议 1.TCP/IP协议族体系结构以及主要协议 TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务,如下图所示。 1.1 数据链路层 ...

lipviolet的博客 7421

HTTPTCP/IP

计算机网络——HTTPTCP/IP 感兴趣的可以去阅读《图解HTTP》一书,本博文主要参考该书并且加入一些面试的知识点。 1.使用HTTP协议访问web WWW(World Wide Web,万维网)是 Web 浏览器当年用来浏览超文本的客户端应用 程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web。3 项 WWW 构建技术,分别是:把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperTex

一席之地 1137

TCP/IP协议、HTTP协议

TCP/IP协议、HTTP协议介绍

AsiaLYF 2万+

计算机网络-HTTPTCP/IP协议简介

一、HTTP 1.常见名词名称简介 LAN Local Area Network 局域网 WLAN Wireless Local Area Network 无线局域网 WAN Wide Area Network 广域网 MAC Media Access Control 网卡地址 CSMA Carrier Sense Multiple Access

m0_50275872的博客 9483

应对面试:《TCP/IPHTTP、SOCKET的区别》、《HTTP协议详解》、《HTTP头部详解

本文分三个部分:《TCP/IPHttp、Socket的区别》、《HTTP协议详解》、《HTTP头部详解》   《TCP/IPHttp、Socket的区别》 网络由下往上分为 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可比性

1423

TCP/IP 协议、HTTP 协议和 FTP 协议详解

本文介绍了常见的网络协议主要包括TCP/IP协议、HTTP协议、FTP协议等。并详细介绍了TCP/IP协议的模型和HTTP网络协议及其请求包和响应包内容

青灯文案的博客 1万+

HTTP详解HTTP协议、TCP/IP、TCP协议究竟是什么?

快速理解HTTPTCP/IP、TCP是什么

伟深么的博客 5908

TCP/IP协议与Http协议的区别详解

TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 关于TCP/IPHTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/I...

u011555996的博客 3885

HTTPTCP/IP、UDP 详解

TCP/IP(Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。TCP/IP协议是一组包括TCP(传输控制协议)协议和IP(网际协议)协议,UDP(User Datagram Protocol)协议、ICMP(Inter

追寻梦想 490

详解TCP/IPHTTP

转自:微点阅读 https://www.weidianyuedu.com TCP/IP是以IP和TCP协议为核心的一整套网络协议的总称,所以有时候我们也称其为TCP/IP协议簇。毫不夸张地说,TCP/IP支撑着整个互联网,因为它就是互联网采用的网络协议。TCP/IP协议簇划分为如右图所示的4个层次[2](应用层、传输层、网络层和链路层),构成整个协议簇的各个子协议处于相应层次中。 既然将整个协议簇命名为TCP/IP,那么IP和TCP自然就是其中最为核心的两个协议了。处于网络层的IP协议提供的IP数..

ysds20211402的博客 162

TCP/IP详解——HTTP 协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP工作在TCP协议的80端口上。

来日可期的博客 2608

TCP/IP协议与HTTP协议区别SOCKET接口详解

网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- TCP协议 会话层-- 表示层和应用层-- HTTP协议 socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可...

aoqijuan3585的博客 424

TCP/IPHTTP详解

转载自品略图书馆http://www.pinlue.com/article/2018/12/0620/567787318113.html TCP/IP是以IP和TCP协议为核心的一整套网络协议的总称,所以有时候我们也称其为TCP/IP协议簇。毫不夸张地说,TCP/IP支撑着整个互联网,因为它就是互联网采用的网络协议。TCP/IP协议簇划分为如右图所示的4个层次[2](应用层、传输层、网络层和链路层),构成整个协议簇的各个子协议处于相应层次中。 既然将整个协议簇命名为TCP/IP,那么IP和TCP自..

yihuliunian的博客 382

TCP/IPHTTP 详解

目录 TCP详解 长连接与短连接 HTTP的keep_alive和TCP的keep_alive的区别 TCP 定义:传输控制协议(TCP,Transmission Control Protocol)提供可靠的端到端字节流的协议。TCP具备面对各种故障时的健壮性。 可靠性; 端到端; 字节流 本节目录 TCP报文头格式要点详解 套接字Socket TCP分包和组包 TCP...

Ethan Zeng 博客空间 735

TCP/IP、UDP、HTTP、Socket详解

原文:http://www.cnblogs.com/lavenderone/archive/2011/10/14/2212523.html 网络由下往上分为: 对应 物理层 数据链路层 网络层( IP协议) 传输层(TCP协议) 会话层 应用层和表示层(HTTP协议)   socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议

qaztct12345的博客 1239

TCP/IP协议、HTTP协议、SOCKET通讯详解

1、TCP连接 TCP(Transmission Control Protocol) 传输控制协议。TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握确认建立一个连接。位码即tcp标志位,有6种 标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urg...

weixin_42206151的博客 329

TCP/IP协议五:HTTP协议详解

http协议详解1. 什么是HTTP协议2. HTTP的工作流程:建立,请求,响应,断开3. HTTP协议的特点3.1、简单快速:3.2、灵活:3.3、HTTP版本区别 0.9、1.0、1.13.4、无状态:3.5、支持B/S和C/S模式。4. URL详解4.1 URI和URL的区别4.1.1 URI4.1.2 URL4.2 URL详解-基本格式5. HTTP请求报文5.1 请求报头5.2 例子6......

哈尼的博客 5763

Http协议及TCP/IP协议详解

一:TCP/IP协议我们在开发中基本不用用到,但是弄明白TCP/IP协议会让我们对网络通信有个更加透彻的理解,在面试中TCP/IP协议基本也是必问的知识点二: TCP/IP协议分层TCP/IP协议一共分为4层,应用层,传输层,网络层,数据链路层 下面详细的讲解这几层所涉及的到协议三:.应用层之http协议:http协议又叫做超文本传输协议。分为请求和响应两部分 1 所谓的HTTP请求,也就是We

zhou12314的专栏 1258

TCP/IPHTTP详解

TCP/IP是以IP和TCP协议为核心的一整套网络协议的总称,所以有时候我们也称其为TCP/IP协议簇。毫不夸张地说,TCP/IP支撑着整个互联网,因为它就是互联网采用的网络协议。TCP/IP协议簇划分为如右图所示的4个层次[2](应用层、传输层、网络层和链路层),构成整个协议簇的各个子协议处于相应层次中。 既然将整个协议簇命名为TCP/IP,那么IP和TCP自然就是其中最为核心的两个协议了。处于网络层的IP协议提供的IP数据报传输是不可靠的,因为它只承诺尽可能地将数据报发送出去,但不能保证发送的数据报能够

Memory1011的博客 363
上一篇: Python Scrapy之小白爬虫笔记
下一篇: 关于GitLab项目内容二次更新经验分享
frozen_memory
博客等级 码龄9年 3粉丝 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值