TCP协议的三握四挥以及TCP,Socket和HTTP之间的关系

如果没看上一篇,希望先看完上一篇有关TCP/UDP/Socket的内容。

一、Tcp三次握手

在这里插入图片描述
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
seq 32位序列;用来标识TCP发端向TCP收端发送的数据字节流。
ack确认序号 32位:
由于改包围SYN报文,ACK标志为0,故没有确认序号(ACK标志位1时确认序号才有效)TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。一旦连接建立,该值将始终发送(同ACK标志)。

ACK:长1位,置位表示确认号字段有效;TCP协议规定,只有ACK=1时有效,也规定建立连接之后所有发送的报文的ACK必须为1.

PSH:长1位,表示当前报文需要请求推(Push)操作;

RST:长1位,置位表示复位TCP连接;

SYN:长1位,在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1,因此,SYN置1就表示这是一个连接请求或连接接受报文。

FIN:长1位,用于释放TCP连接时表示发送方比特流结束;用来释放一个连接,当FIN=1时,表明此报文的发送方的数据已经发送完毕,并要求释放连接。

握手图:
在这里插入图片描述
上面的图很形象的描述整个连接的过程:但问题来了,为什么要进行三次握手呢。两次不就可以了吗?
原因是TCP协议是传输层的一个面向连接的安全可靠的一个传输协议,三次握手只知道客户端可以发送报文,但不知道客户端是否可以接收报文。所以通过三次连接,不管是客户端还是服务端,都知道我既能给对法发送消息,也能收到对方的响应。那么,这个连接就被安全的建立了。
传输完毕后需要断开连接。。。。那么如何断开连接呢?

二、四次挥手

在这里插入图片描述

客户端有必要设置2ML的等待时间吗?
如果没有2MSL的等待时间,那么如果客户端最后一次确认报文丢失,那么服务器端就会因为迟迟收不到客户端的确认报文而不断触发服务器端的超时重发。

在这里插入图片描述
问:服务端两次报文为什么不合并为一个报文以此发送?
因为客户端发送FIN=1的断开连接请求报文,服务器端可能还有未传输完成的剩余数据,所以服务器端在收到客户端的断开请求时,首先对客户端的断开请求做回应,发送ACK=1的确认收到,表示:“你发的FIN报文我收到了(但是并不意味这数据传输完毕)”,等待服务器端数据全部传输完毕后,服务器端返回FIN=1的释放连接报文。

三、HTTP和TCP

1.HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用

2.HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

3.由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

三 、Socket连接与HTTP连接

Socket是对TCP/IP协议的封装,Socket本身不是协议,而是一个调用接口(API),通过Socked,才能使用TCP/IP协议。因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。相对于HTTP连接,Socket是一种长连接,理论上客户端和服务器一旦建立起连接不会主动断掉。

但在实际网络应用 中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导 致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。

而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给 客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以 保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

四、TCP和HTTP相互关系

TCP和UDP的区 首先,纠正一下我以前一直误解的概念,我一直以为Http和Tcp是两种不同的,但是地位对等的协议,虽然知道TCP是传输层,而http是应用层今天学习了下,知道了 http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。

第一:从传输层,先说下TCP连接,我们要和服务端连接TCP连接,需要通过三次连接,包括:请求,确认,建立连接。即传说中的“三次握手协议”。

第二:从实际上的数据应用来说http

在前面客户端和应用服务器建立TCP连接之后,就需要用http协议来传送数据了,HTTP协议简单来说,还是请求和响应。

总体就是C发送一个HTTP请求给S,S收到了这个http请求,然后返回给Chttp响应,然后C的中间件或者说浏览器把这些数据渲染成为了网页,展示在用户面前。

第一:发送一个http请求给S,这个请求包括请求头和请求内容:

request header:请求头

1.请求的方法是POST/GET,请求的URL,http协议版本

2.请求的数据,和编码方式

3.是否有cookie和cooies,是否缓存等。

post和get请求方式的区别是,get把请求内容放在URL后面,但是URL长度有限制。而post是以表单的形式,适合要输入密码之类的,因为不在URL中显示,所以比较安全。

request body:即请求的内容.

第二:S收到了http请求,然后根据请求头,返回http响应。

response header:包括了1.cookies或者sessions2.状态吗3.内容大小等

response body:

即响应的内容,包括,JS什么的。

第三,C收到了以后,就由浏览器完成一系列的渲染,包括执行JS脚本等。

TCP是底层通讯协议,定义的是数据传输和连接方式的规范
HTTP是应用层协议,定义的是传输数据的内容的规范
HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP

HTTP支持的是www服务
而TCP/IP是协议
它是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。
TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值