美文网首页
网络协议梳理

网络协议梳理

作者: 尼古拉斯_富貴 | 来源:发表于2017-08-04 12:22 被阅读0次

    经常听到一些网络协议相关的名词,像什么TCP、UDP、HTTP、SOCKET,它们到底有什么样的区别呢,今天我们就来好好梳理一遍。

    先看一幅图

    如图所示:

    • IP协议属于网络层
    • TCP和UDP属于运输层协议
    • HTTP应用层协议
    我们来假想一个典型的网络通讯过程

    如果现在有客户端A要想服务器B发送一个http网络请求,整个流程是怎样的呢?

    首先A与B要建立网络连接,这里就需要用到网络层的IP协议,根据IP地址和端口去发现对方。
    成功找到对方后将会建立一条TCP连接(HTTP基于TCP),当TCP的三次握手建立之后,进入HTTP通讯流程——正式发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。
    服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。
    HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。
    HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。

    把以上过程抽象一下:

    把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。
    TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。


    在文章的最后,我们再来简单回顾下三次握手的细节:
    TCP连接的三次握手:
    第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
    断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”

    总结:

    HTTP协议是基于传输层的TCP协议,而TCP协议又基于网络层的IP协议。
    SOCKET是针对网络编程设计的接口,它有很多不同的具体实现,例如以TCP为基础的TCPSOCKET和以UDP为基础的UDPSOCKET,貌似我们常用的基于TCP/IP的SOCKET编程更多一些。

    相关文章

      网友评论

          本文标题:网络协议梳理

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