深入理解HTTP一:网络基础TCP/IP

深入理解HTTP一:网络基础TCP/IP

通常我们使用的网络是在TCP/IP协议族的基础上运作的,也就是说HTTP属于它内部的一个子集。
TCP/IP协议族分为4层,应用层,传输层,网络层,数据链路层。(我们需要了解基本的7层协议模型)
应用层:其决定了向用户提供应用服务时的通信活动,HTTP,SMTP,FTP和QQ内部协议都是应用层协议
传输层:TCP/IP协议(传输控制协议),UDP协议(用户数据协议),提供处于网络链接中的两台计算机之间的数据传输
TCP/IP本身又分层两层:网络层,IP协议,和传输层,TCP协议(先忽略UDP)。
网络层:用来处理在网络上流动的数据包,数据包是网络传输的最小单位
数据链路层:用来链接处理网络的硬件部分,硬件上的范畴均在链路层的作用范围之内。
这里写图片描述
利用TCP/IP协议族进行网络通信时,发送端从应用层往下走,接收端从应用层往上走。
首先作为发送端的客户端在应用层 (HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。 接着,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这里写图片描述
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该 层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层 时会把对应的首部消去。(封装)
这里写图片描述
Http的首部就是上图中的Appl首部,一条Http请求或者响应协议会被分成N个TCP协议报文,每个TCP协议报文,每个TCP报文又被IP报文封装,每个报文头部的内容是不同的,比如IP报文头部由源IP和目的IP信息,TCP报文头部有源端口号和目的端口号信息等

IP协议(负责传输)

对于IP协议,通信首先得有地址,无论是邮政通信地址,手机号,还是电子邮箱。要在成千上万,上亿的设备中通信,需要有IP地址和MAC地址,有了IP地址,怎么将一个IP地址的信息发送给另外的IP地址呢?首先一个问题是将IP地址翻译成链路层的地址。其次,IP地址直接可能不是直接连通的,所以要通过一系列中间设备,通过这些设备转发,要找出来哪些通过中间设备能够到达目的IP地址,一路转发过去,这个过程叫路由。然后还要将IP消息放到链路层的消息里才能发送,在链路层消息里要标明源IP地址和目标IP地址。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。
这里写图片描述

TCP协议(确保可靠)

由于链路层消息大小的限制,IP消息大小是有限制的,而且IP消息是不可靠的,如果要可靠地传递大的消息,就需要传输层协议TCP。一个计算机一个IP地址,可是如果想同时下载文件和QQ聊天怎么办呢,因此引入的端口的概念,一个IP地址可以有许很多个端口,TCP层的地址就变成IP地址+端口。TCP 协议为了更容易传送大数据把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
由于需要保证可靠,所以需要接收方给发送方发确认消息,如果超过一段时间发送方没有接收到确认消息,就会重新发送,为了避免一下发送太多,都得重发,于是需要进行流控。当然,确认消息也可能丢失,那么接收方就得处理重复的消息。由于不同的IP消息可能走不同的路径,由于时延不同,可能后面的消息比前面的消息先到了。接收方还要等收到前面的消息后再交给接收程序。
所以,TCP就引入了连接的概念,连接保持通信的状态。于是就要在开始通讯时建立连接,在通信完成后关闭连接,这里也就引入我们得三次握手策略。TCP还引入了一些其他机制如拥塞控制等。
我们以一个具体例子来说明TCP协议:(转载自知乎)
下个月你就要结婚了,打个电话给老王。
你先打开电话本,查找“老王”的电话号码:老王 -> 13987654321(DNS解析
。然后你用手机拨打了13987654321(IP)。
你的手机连接到了联通的基站(路由器),联通(你自己的网关)发现这是个移动的手机号,通过移动的帮助,找到了老王的手机(MAC),
老王的手机开始响铃。
-“嘟……”(TCP握手过程
-“喂?老绿啊!”“哈哈,是我啊,老王!(连接建立)下个月我结婚,你有空吗?”(开始传输数据,先说事,代表数据)“噢,有啊!”
-“那你记一下地址啊(再说时间地点)!北京市东长安街16号午门太和殿。”“诶,你慢点说(流量控制),我记一下。”
-“北京市”(缩小了滑动窗口)“嗯,然后呢?”(接收到数据,返回ACK确认信息)“东长安街16号”“东……16号”(接收到数据,ACK确认信息)-“午门太和殿”“什么殿?你再说一遍,我没听清!”(“午门太和殿”传输失败,数据包丢失)-“太和殿”(TCP重传)“好!记下了”(传输成功
-“那回见啊!”(准备断开连接)“好嘞!”
【通话已结束】(连接断开
HTTP只是信息的载体,刚才说的“汉语”就是HTTP。你也可以用其他协议传递,比如“I’m getting married next month”,只要对方能理解协议,那就是同一个意思。电话线路相当于一个TCP连接。TCP提供了流量控制、数据重传等机制保证了数据可靠顺序传输。当然这个例子中,可靠传输是靠人来保证的。
HTTP和TCP的联系,是HTTP(要结婚的消息)使用TCP(电话)提供的“传输能力”。
协议栈的每一层,都专注于自己层的事情:HTTP专注于要传输的信息(HTTP是信息的载体,所以在协议里面会标注信息长度,信息类型等),TCP专注于传输的可靠(为了可靠传输,TCP会给自己层的包标注大小和顺序,并且有确认机制),IP负责因特网传输,再下面的层负责与局域网和硬件打交道。
“我下个月结婚”这几个字,你也可以通过短信(UDP)或微信(其他传输协议)来发送。虽然传输层协议不一样(电话 vs 短信),底层还是依赖IP协议(发短信仍然需要知道对方的电话号码)。
而TCP连接建立,三次握手策略
1. 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
2. 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
3. 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B才能开始传送数据。
这里写图片描述
TCP是三次交互完成连接的建立,四次交互来断开一个连接。
这里写图片描述
三次握手:
A:“喂,你听得到吗?”A->SYN_SEND

B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

A:“我能听到你,今天balabala……”B->ESTABLISHED

四次挥手:
A:“喂,我不说了。”A->FIN_WAIT1

B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

B:”好了,说完了,我也不说了。”B->LAST_ACK

A:”我知道了。”A->TIME_WAIT | B->CLOSED

(A等待2MSL(最长报文端寿命),保证B收到了消息,否则重说一次”我知道了”,A->CLOSED)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值