首页 > 技术文章 > TCP/IP

unclewang666 2019-07-08 19:25 原文

一、关于TCP/IP

TCP/IP协议是一个协议集合,HTTP协议,IP协议,TCP协议,DNS协议等都属于TCP/IP协议。

TCP/IP协议是为了保证全球亿万台计算机能准确、无误的通信。

TCP/IP中分层是很重要的概念,每层完成不同的功能。分为应用层,传输层,网络层,数据链路层。分层的目的是为了层级之间的功能相对队里,互不影响。

 

 
TCP/IP四层结构

TCP/IP通信数据流

 

 
TCP/IP通信数据流

二、HTTP、TCP、IP、DNS协议

2.1 HTTP协议(hyperText transfer protocol)超文本传输协议

    HTTP是基于TCP/IP协议的应用层协议,它不涉及数据包的传输,主要规定了客户端和服务器端的通信协议,默认端口是80

2.2 IP协议(Internet protocol)

    IP协议的作用是将各种数据包准确无误的传递给对方,其中重要的条件是IP地址和MAC地址。由于IP地址是稀有资源,不可能每个人都有一个IP地址,所以我们通常的IP地址都是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址,而MAC地址是唯一的。

    IP实现的两个基本功能:寻址和分段

    寻址功能就是原地址和目标地址之间建立连接,需要使用ARP协议(Address Resolution Protocol),IP协议就是找到一条连接两台电脑的路径,从而完成数据的交互。

    地址解析协议,ARP协议,是根据IP地址获取物理地址的一个TCP/IP协议。IP间的通信依赖MAC地址。在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标,这时就会采用ARP协议,根据通讯放的IP地址就可以反查出对应的MAC地址,从而进行精确的定位,完成寻址的功能。

    分段功能是为了适应不同网络对包的要求,对数据进行重新组装。

2.3 TCP协议(Transmission Control Protocol)传输控制协议

    TCP协议就是将数据包安全的给对方,IP协议是找到对方的详细地址,分工不同,互不冲突。

    TCP属于传输层,提供可靠的字节流服务。字节流类似于数据切割,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。可靠的传输服务是指,能够把数据准确可靠的传给对方。TCP协议为了更容易的传输大数据才将数据进行分割,而且TCP协议能够确认数据最终是否送达对方。

    为了确保信息准确无误的送达,TCP采用了三次握手策略(three-way-handshaking)。TCP建立连接时需要三次握手,在关闭连接时还需要四次握手。这部分占用了http请求过程的中大量时间,在高并发时,可以考虑优化这部分。

 
三次握手策略
 
三次握手
 
四次挥手

2.4 DNS协议(Domain names System)

    和HTTP协议一样是处于应用层的服务,提供域名到IP地址之间的解析服务。

总结

 

 
一个请求的全过程

三、post和get的区别

    1、可缓存:get请求能缓存,post请求不能;响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。

    2、get是获取资源,post用于传输实体主体。

    3、参数:get请求的参数在url里面,会被浏览器保存历史记录,post的请求数据在数据包里面,同时因为url只支持ASCII码,因此get的参数如果存在汉字就要先进性编码,post请求支持更多的编码类型且不对数据类型限制;post传输的数据比get的多;url的长度有限制,会影响get请求;

    4、安全的HTTP方法不会改变服务器状态,也就说是只读的。所以get是安全的,post不是安全的。

    5、幂等性:get是幂等的,post不是幂等的。

    6、XMLHttpRequest: 在使用XMLHttpRequest时,post请求发送时,浏览器会先发送header再发送Data;get请求header和data一起发送。

    XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。

四、状态码

    4.1 2xx成功

        200 OK,表示从客户端发来的请求在服务器端被正确处理。

        204 No content,表示请求成功,但是想要报文不包含实体的主体部分。

        206 Partial Content ,进行范围请求。

    4.2 3xx重定向

        301 moved permanently 永久性重定向,表示自愿一杯分配了新的URL。

        302 found 临时性重定向,表示自愿临时被分配了新的URL。

        303 see other 表示资源存在着另一个URL,应使用GET方法获取资源。和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

        注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。

        304 not modified 表示服务器允许访问资源,但因发生请求未满足条件的情况。

        307 temporary redirect,临时重定向,和302含义相同。但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

   4.3 4xx 客户端错误

        400 bad request 请求报文存在语法错误

        401 unauthorized 表示没有权限

        403 forbidden 表示对请求资源的访问被服务器拒绝

        404 not found 表示在服务器上没有找到请求的资源

   4.4 5xx 服务器错误

        500 internal sever error 表示服务器端在执行请求时错误

        503 service unavailable 表明服务器暂时处于超负载或正在停机维护,无法处理请求

五、HTTPS

    HTTPS是HTTP建立在SSL/TLS安全协议上的。

    在IOS中,客户端本地会存有CA证书,在HTTPS请求时,会首先向服务器获取公钥,获得公钥后会使用本地的CA证书验证公钥的正确性,然后通过正确的公钥加密信息发送给服务器,服务器会使用私钥解密信息。

    SSL/TSL握手阶段分为五步:

 

 
 

    HTTP和HTTPS的对比:

    HTTP:无状态,协议对客户端没有状态存储;无连接,每次请求都会和服务器重新建立连接;基于请求和响应,由客户端发起,服务端响应;简单快速,灵活;使用明文,请求和响应不会对通信方进行确认,无法保证数据的完整性。

    HTTPS:内容加密,采用混合加密技术,中间者无法直接查看明文内容;验证身份,通过证书认真客户端访问的是自己的服务器;保护数据完整性,放置传输的内容被中间人冒充或篡改。



推荐阅读