TCP/IP协议简单认识

TCP/IP和HTTP的相关知识
1.网络分层
应用层——》传输层——》网络层——》数据链路层——》物理层

物理层:该层主要负责比特流在节点间的传输,即物理传输,通俗的说:
就是把计算机链接起来的物理手段。

数据链路层:该层控制网络层与物理层之间的通信,其主要功能是如何在
不可靠的物理线路上进行数据的可靠传递,为了保证传输的正确,从网络
层接收到的数据被分割成特定的可被物理层传输的帧,帧是用来移动数据的
结构包,它不仅包含了原始数据,还包括接收方和发送方的物理地址以及纠错和
控制信息,其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错
到达,如果在传送数据时,接收到检测到所传数据中有差错,就要通知发送发重新
发送这一帧。

网络层:该层决定如何将数据从发送方路由到接收方,网络层通过综合考虑发送
权重服务质量以及可选路由的花费,来决定从一个网络中的节点A发送到零杠一个
网络节点B的最佳路径

传输层:该层为两台计算机上的应用程序提供端到端的通信,相比之下,网络层的功能时建立主机到
主机的通信,传输层有两个协议,其中TCP(传输控制协议)和UDP(用户数据
报协议),其中TCP是一个可靠的面向连接的协议,UDP是不可靠的或者无连接的
协议

TCP的三次握手与四次挥手
TCP传输过程:打开连接,写请求数据,读相应数据,关闭连接
TCP三次握手过程如下:

第一次握手:建立连接,客服端发送连接请求报文段,将SYN设置为1,
Sequence Number为x;接下来客户端进入SYN_SEND状态,等待服务器确认

第二次握手:服务器收到客户端的SYN报文段,对SYN报文段进行确认,设置
Acknowlegment Number为x+1(seq+1);seq为y,服务端将上述所有信息放到SYN
+ACK报文段中,一并发送给客户端,此时服务段进入SYN_REVD状态

第三次握手:客户端收到SYN+ACK报文段,然后将ACK设置为y+1,向服务端发送
ACK报文段,这个报文段发送完毕后。客户端和服务段都进入ESTABLISHED
(TCP连接成功)状态,完成TCP的三次握手

当客户端和服务端通过三次握手建立了TCP连接以后,当数据传送完毕后,断开
连接时需要进行四次挥手
第一次挥手:客户端何止Seq和ACK,向服务端发送一个FIN报文段,此时客户端进入
FIN_WAIT_1状态,表示客户端没有数据要传递给服务端了

第二次挥手:服务端接收到了客户端发送的FIN报文段,向客户端回了一个ACK
报文段。

第三次挥手:服务段向客户端发送FIN报文段,请求关闭连接,同时服务器进入
LAST_ACK状态

第四次挥手:客户端收到服务端发送的FIN报文段,向服务端发送ACK报文段,
然后客户端进入TIME_WAIT状态,服务器端接收到客户端的ACK报文段以后
就关闭连接,此时客户端等待2MSL(最大报文段生存时间)后依然没有收到
回复,则说明服务端已正常关闭,这样客户端也可以关闭连接了。

如果有大量的连接,每次在连接关闭连接时都需要进行三次握手四次挥手,这很
显然会造成性能低下,因此HTTP有一种叫做keepalive connection的机制,他可以
在传输数据后仍然保持连接,当客户端需要再次获取信息时,直接使用刚才建立的
连接,无需要再次握手。

HTTP协议的主要特点
1.支持C/S模式
2.简单快速:客户端向服务端请求服务时,只需要传送请求方法和路径,请求方法
常用的有post get head,每种方法都规定了客户与服务器联系的类型不同,由于
HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度快。
3.灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content_type
加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的
请求,并收到客户的应答后,断开连接,采用这种方式可以节省传输时间
5.无状态:HTTP协议是无状态协议,无状态是指协议对于事物处理没有记忆能力
,缺少状态意味着如果后续处理需要前面的信息,则他必须重新传输,这样可能
导致每次传送的数据量增大,而另一方面,在服务器不需要先前的信息时就比较
快。
HTTP URL格式如下:
HTTP://host[:port][abs_path];

http要通过HTTP协议来定位网络资源,host表示合法的Internet主机域名或者IP
地址,port指定一个端口号,为空则是默认的端口80,abs_path指定请求资源
的URL.

HTTP有两种报文,分别是请求报文和响应报文

HTTP请求报文:
HTTP报文时面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的
长度都是不确定的。
一般一个HTTP请求报文由请求行,请求报文,空行和请求数据4个部分组成。

1.请求行
请求行由请求方法,URL字段和HTTP协议的版本组成,格式如下
Method Request-URI HTTP-Version CRLF
其中Method表示请求方法,Request-URI是一个统一资源标识符,HTTP-Version
表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,
不允许出现单独的CR或者LF字符)

HTTP请求方式共有8种get post head delete put trace connect option

2.请求报头
在请求行之后会有0个或者多个请求报头,每个请求报头都
包含一个名字和一个值,他们之间用:号分割

3.请求数据
请求数据不在GET方法种使用,而在POST方法中使用。Post方法适用于
需要客户填写表单的场合,与请求数据相关的最常用请求报头是
Content_type和Content_Length。

HTTP响应报文
HTTP响应报文由状态行,响应报文,空行,响应正文组成。
状态行格式如下
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示协议的版本,Status-code表示服务器发挥的响应状态
Reason-Phrease表示状态码的文本描述。状态码由三位数字组成。

常用的状态码如下:
200 ok 客户端请求成功
400 Bad Request:客户端请求语法错误,服务器无法理解
401 Unauthorized:请求未经授权
403 Forbbing :服务器接收到请求,但是禁止提供服务
500 Internal Server Error:服务器内部错误,无法完成请求
503 Server Unavaiable:服务器当前不能处理客户端的请求,一段时间后可能恢复

HTTP消息报头
消息报头分为通用报头,请求报头,响应报头,实体报头,消息报头
由键值对组成,每行一对,关键字和值用:号隔开

1.通用报头
他既可以出现在请求报头中也可以出现在响应报头中

1.Date:表示消息产生的日期与时间
2.Connection:允许发送指定连接的选项,例如指定连接是连续的,或者
指定“close”选项通知服务器,在响应完成以后关闭连接。
3.Cache_Control:用于指定缓存指令,是单向的

2.请求报头
请求报头通知服务器关于客户端请求的信息
1.Host:请求的主机名。允许多个域名同处同一个IP地址,即虚拟主机
2.User_Agent:发送请求的浏览器类型,操作系统等信息
3.Accept:客户端可以识别的内容类型列表,用于指定客户端接收哪些类型的信息
4.Accept_Encoding:客户端可以识别的数据编码
5.Accept_Language:表示浏览器所支持的语言类型
6.Connection:允许客户端和服务器指定与请求/响应有关的选项

发布了123 篇原创文章 · 获赞 74 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43927892/article/details/102733019