先罗列一些基本概念:
[socket]:
网络上2个程序间通过一个双工(双向)的通信实现实时数据的交换,这个连接的一段称为socket(套接字),其本质是对TCP/IP的封装。
[网络7层协议]
- 应用层(HTTP,FTP等)
- 表示层(数据加密)
- 会话层(数据)
- 传输层(TCP,UDP)
- 网络层(IP)
- 链路层(应用于介质传输的协议)
- 物理层(用于讨论物理介质的,比如电流,光调制等)
[URI,URL,URN]
- URI(uniform resource identifier)
统一资源标识符,有3部分组成- 访问资源的命名机制
- 存放资源的主机名
- 资源自身的名称
- URL(uniform resource locator)
统一资源定位符- 访问协议
- 存放资源的主机IP地址
- 存放资源的具体地址(如目录或文件名)
- URN(uniform resource name)
统一资源命名
它可以唯一标识网络中的一个实体,而位置可以发生变化,它可以引用多个URL。比如P2P下载中的磁力链接就是URN的一种实现。
[报文]
报文(message)是网络中交换与传输的数据单元,即站点需要一次性发送的数据块。
[TCP]
是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP的几个名词
- SYN(Synchronize Sequence Numbers)同步序列编号,用于发起连接。
- ACK (Acknowledgement)确认字符。
- SEQ ( Sequence ) 序号。
- PSH (Push)推送,让服务端直接拿走数据,这个数据一般较多,不经过缓冲区。
- RST(Rest)重置连接。
- FIN (FINISH)请求关闭连接。
- MSS(Management Support System)表示传输时每个报文能承载的最大数据长度。
TCP建立连接的3次握手
- 客户端发送SYN报文带上seq(随机产生)。
- 服务端发送SYN和ACK报文带上seq,为上次报文的seq+1。
- 客户端发送ACK报文
TCP断开连接的4次握手
- 客户端发送FIN报文带上seq(随机产生)。
- 服务端继续完成未发送完的数据包,发送SYN和ACK报文带上seq,为上次报文的seq+1。
- 服务端完成所有的数据包的发,最后发送FIN报文,告诉客户端可以关闭连接。
- 客户端发送ACK报文,关闭连接。
[http]
简介
- 【定义】超文本传输协议(Hyper Text Transfer Protocol),用于从WWW(world wide web)传输超文本到本地。
- 基于TCP
- 属于应用层面向对象的协议
特点
- 简单快速,只需要传请求方法和路径。
- 灵活。可以传输的任意类型的数据,通过
Content-Type
标记即可。 - 无状态
- 支持B/S,C/S模式
请求报文组成
由4部分组成
- 请求行(请求方法,URL,协议)
- 请求头
- 空行
- 请求数据
响应报文组成
由4部分组成
- 状态行(协议版本号,状态码,状态消息)
- 响应头
- 空行
- 响应正文
工作原理
- http客户端通过TCP向服务端发送一个请求。
- 服务端做出响应。
- 关闭TCP连接。
- 解析响应内容。
[下面基于wireshark(网络抓包工具)观察下TCP的几次握手]
直接上图
image
对于wireshark还处于初步学习阶段,有建议和补充的欢迎留言~
网友评论