TCP、UDP、IP 、HTTP协议分析

OSI分层协议

- 应用层(application layer) 应用层是体系结构中的最高层。应用层直接为用户的应用进程提供服务。这里的进程就是指正在运行的程序。在因特网中的应用层协议很多,如支持万维网应用的http协议,支持电子邮件的smtp协议,支持文件传送的ftp协议等等。

  • 运输层 (transport layer) 运输层的任务就是:负责向两个主机中进程之间的通信提供服务。 由于一个主机可同时运行多个进程,因此运输层具有 复用 和 分用 的功能。 复用:就是多个应用层进程可同时使用下面运输层的服务。 分用:则是运输层把收到的信息分别交付给上面应用层的相应的进程。

    运输层主要使用以下两种协议:
    传输控制协议TCP(Transmission Control Protocol)——面向连接的,数据传输的单位是报文段(segment),能够提供可靠的交付。
    用户数据报协议UDP(User Datagram Protocol)——无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“尽最大努力交付(best-effort delivery)”。

  • 网络层 (network layer) 网络层负责为分组交换网上的不同主机提供通信服务。 在发送数据时候,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。TCP/IP体系中,由于网络层使用IP协议,因此分组也叫作 IP数据报,或简称为数据报。 分组 和 数据报 视为同义词。

  • 数据链路层(data link layer) 数据链路层,简称链路层。 两个主机之间的数据传输,总是在一段一段的链路上面传送的,也就是说,在两个相邻结点之间(主机与路由器之间 或者 两个路由器之间)传送数据是直接传送的(点对点)。 这时,就需要使用专门的链路层的协议。在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点间的链路上“透明”地传送帧(frame)中的数据。

  • 物理层(physical layer) 在物理层上传送的数据的单位是比特。 物理层的任务就是透明地传送比特流。 也就是说,发送方发送1(or 0),接收方就应当接收到1(or 0),而不是0(or 1)。 因此物理层要考虑用多大的电压代表”1“ 或 ”0“,以及,接收方如何识别出发送方所发送的比特。 物理层还需要确定连接电缆的插头应当有多少根引脚以及各条引脚应如何连接。

传输过程中头部变化


不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

TCP数据传输过程

  • seq:指出接收方希望收到对方下次发送的数据的第一个字节的序号。
  • URG位:紧急标志,和紧急指针配合使用,当其为1时表示,此报文要尽快传送。
  • ACK位:确认标志,和确认号字段配合使用,当ACK位置1时,确认号字段有效。
  • PSH位:为推送标志,置1时,发送方将立即发送缓冲区中的数据。
  • RST位:复位标志,置1时,表明有严重差错,必须释放连接。
  • SYN位: 同步标志,置1时,表示请求建立连接。
  • FIN位:终止标志,置1时,表明数据已经发送完,请求释放连接。
  • 窗口大小:32bit,用于向对方通告当前本机的接受缓冲区的大小。
  • 校验和字段长度:16bit,校验范围包括段首部、数据以及伪首部。 三次握手
    SYN(client) -> ACK + SYN(server) -> ACK(client)
    四次挥手
    FIN(client) -> ACK(server) -> FIN(server) -> ACK(client)

HTTP协议

Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接

 以前有个概念很容忍搞不清楚。就是为什么Http是无状态的短连接,而TCP是有状态的长连接?Http不是建立在TCP的基础上吗,为什么还能是短连接?现在明白了,Http就是在每次请求完成后就把TCP连接关了,所以是短连接。而我们直接通过Socket编程使用TCP协议的时候,因为我们自己可以通过代码区控制什么时候打开连接什么时候关闭连接,只要我们不通过代码把连接关闭,这个连接就会在客户端和服务端的进程中一直存在,相关状态数据会一直保存着。

请求头:
HTTP/1.1、Host、userAgent、Content-type、Referer等等

特点

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  • 支持B/S及C/S模式。

HTTPS优点

1、内容加密,建立一个信息的安全通道,来保证数据传输过程的安全性。
2、身份认证,确认网站的真是性。
3、数据完整性,防止内容被第三方冒充或者篡改。

参考文档