美文网首页iOS知识点程序员
TCP、UDP、HTTP、HTTPS

TCP、UDP、HTTP、HTTPS

作者: 小道萧兮 | 来源:发表于2016-11-08 11:15 被阅读3677次

    一、简介

    它们都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。

    二、TCP、UDP、HTTP、HTTPS之间的关系

    TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
    在网络层,有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
    在传输层,有TCP协议与UDP协议。
    在应用层,有WebSocket、FTP、HTTP、TELNET、SMTP、DNS等协议。
    因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
    而HTTPS可以理解为更安全的HTTP协议。

    三、Socket通信

    Socket是为了实现以上的通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过Socket进行通信,而通信的规则采用指定的协议。Socket只是一种连接模式,不是协议。TCP、UDP,简单的说(虽然不准确)是两个最基本的协议,很多其它协议都是基于这两个协议,如HTTP就是基于TCP的。用Socket可以创建TCP连接,也可以创建UDP连接,这意味着,用Socket可以创建任何协议的连接,因为其它协议都是基于此的。

    四、TCP协议

    TCP的建立连接协议又称之为“三次握手”:

    1. 客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
    2. 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
    3. 客户必须再次回应服务段一个ACK报文,这是报文段3。
    TCP三次握手
    为什么需要“三次握手”
    在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。这两种不用的表述其实阐明的是同一个问题。 谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”。 主要目的防止server端一直等待,浪费资源。

    “四次挥手”过程
    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    1. TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
    2. 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
    3. 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
    4. 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
    TCP四次挥手
    为什么需要“四次挥手”
    那可能有人会有疑问,在TCP连接握手时为何ACK是和SYN一起发送,这里ACK却没有和FIN一起发送呢。原因是因为TCP是全双工模式,接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据。

    五、什么是HTTP协议

    HTTP全称是HyperText Transfer Protocal,即:超文本传输协议。从1990年开始就在WWW上广泛应用,是现今在WWW上应用最多的协议。HTTP是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会通过HTTP在Internet上进行数据的发送和接收。HTTP是一个基于请求/响应模式的、无状态的协议,即我们通常所说的Request/Response。
    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

    1. 建立TCP连接
      在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80
    2. Web浏览器向Web服务器发送请求命令
      一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令
      例如:GET/sample/hello.jsp HTTP/1.1
    3. Web浏览器发送请求头信息
      浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
    4. Web服务器应答
      客户机向服务器发出请求后,服务器会客户机回送应答,
      HTTP/1.1 200 OK
      应答的第一部分是协议的版本号和应答状态码
    5. Web服务器发送应答头信息
      正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
    6. Web服务器向浏览器发送数据
      Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
    7. Web服务器关闭TCP连接
      一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

    六、HTTPS的工作原理

    HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密、对称加密以及HASH算法。握手过程的具体描述如下:

    1. 浏览器将自己支持的一套加密规则发送给网站。
    2. 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
    3. 浏览器获得网站证书之后浏览器要做以下工作:
      a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
      b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
      c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
    4. 网站接收浏览器发来的数据之后要做以下的操作:
      a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
      b) 使用密码加密一段握手消息,发送给浏览器。
    5. 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

    HTTPS协议和HTTP协议的区别:

    1. HTTPS协议需要到ca申请证书,一般免费证书很少,需要交费。
    2. HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的SSL加密传输协议。
    3. HTTP和HTTPS使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    4. HTTP的连接很简单,是无状态的 。
    5. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。

    相关文章

      网友评论

      • JunL:写得很详细
      • 033ca61f58f9:写的正是我想要的知识,太赞了!!!!

      本文标题:TCP、UDP、HTTP、HTTPS

      本文链接:https://www.haomeiwen.com/subject/eqeauttx.html