关于java:网络是如何请求的第二章上-一条TCP连接的生命周期

6次阅读

共计 1672 个字符,预计需要花费 5 分钟才能阅读完成。

用电信号传输 TCP/IP 数据


全书基于一个简略场景:用户向浏览器输出一条 URL 到响应返回,一条网络申请的生命周期。

全书共分六合局部:

  1. 应用层客户端生成 HTTP,委托给操作系统的协定栈
  2. 协定栈(TCP/IP 模块)调用网卡驱动生成电信号
  3. 网卡如何通过路由器达到用于接入互联网的路由器
  4. 互联网外部接力传输
  5. 达到 web 服务器之后先通过防火墙的查看
  6. web 服务器是如何收取数据的

第二章次要介绍,操作系统中的协定栈和网卡是如何将应用程序的音讯发给服务器的:

  1. 创立套接字
  2. 连贯服务器
  3. 收发数据
  4. 从服务器断开连接并删除套接字
  5. IP 与以太网的包收发操作
  6. 用 UDP 收发数据的操作


如上图所示,本文介绍 1 至 4,对应 TCP 模块的整个生命周期。

次要看点如下:

  1. 协定栈的内部结构
  2. 套接字的实体是什么?有什么工具能间接察看到吗?
  3. “连贯”的过程中产生了什么?三次握手
  4. 收发数据时的具体工作流程。
  5. “断开”的过程中产生了什么?四次挥手

0. 概述

开始摸索之前作者先梳理了几个概念

0.1 协定栈的内部结构

所谓协定栈分成高低两局部,

  1. 接管应用程序委托收发数据的 TCP UDP 模块。
  2. 管制网络包发送的 IP 模块,IP 模块蕴含 ICMP 协定和 ARP 协定
  3. 网卡驱动负责管制网卡硬件,用于监听发送网线中的光电信号
浏览器,邮件等个别应用程序个别用 TCP
DNS 查问等收发较短的控制数据个别用 UDP

0.2 套接字的实体

先用 netstat 直观的感受一下

套接字:协定栈中用于寄存 管制信息 的内存空间
管制信息:协定类型 ip 地址 端口号 状态 …

套接字中记录了通信单方的信息以及通信所处的状态,而协定栈是依据套接字中的管制信息来工作的

1. 创立套接字

int socket(int af, int type, int protocol);

af:地址族,即 IP 地址类型,罕用的有 AF_INET 和 AF_INET6
  AF_INET 代表 IPv4,例如 127.0.0.1
  AF_INET6 代表 IPv6,例如 1030::C9B4:FF12:48AA:1A2B
type:数据传输方式 / 套接字类型,罕用的有 SOCK_STREAM,SOCK_STREAM
  SOCK_STREAM 流格局套接字 / 面向连贯的套接字 
  SOCK_DGRAM 数据报套接字 / 无连贯的套接字
protocol:传输协定,罕用的有 IPPROTO_TCP 和 IPPTOTO_UDP
  IPPROTO_TCP:TCP 传输协定 
  IPPTOTO_UDP:UDP 传输协定
返回值:描述符

详见 socket()函数详解,介绍了 linux windows 两种版本

创立套接字的工作流程

  1. 向内存管理器申请一块内存 –> malloc()
  2. 初始化管制信息(协定类型 ip 地址 端口)
  3. 返回描述符给应用程序,用于惟一标识套接字(管制信息),后续通信应用程序与协定栈交互会带上描述符。

2. 连贯服务器

连贯是什么

int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);
sock        套接字文件描述符
serv_addr    地址族 ip port
addrlen        serv_addr 大小

以太网的网线始终处于连通状态,无需连贯。
连贯理论是通信单方替换管制信息。

连贯时做了什么:

  1. 应用程序将服务端 ip port 交给协定栈
  2. 协定栈发动开始通信的申请
  3. 交互管制信息
  4. 开拓收发数据的缓冲区

负责保留管制信息的头部

通信操作中的管制信息分两类:

  1. 客户端与服务器相互联系时替换的管制信息。即各类协定的头部,TCP、IP、MAC。头部用于记录和替换管制信息
  2. 保留于套接字中,用于控制协议栈操作的信息。从应用程序传递来的信息以及从通信对象接管到的信息。

对于套接字中的管制信息,不同协定栈有不同实现,只有通信时按规定生成协定头部即可。

TCP 头部信息:

管制信息:

通信操作中的管制信息分两类:1. 头部中记录的信息
2. 套接字(协定栈中的内存空间)中记录的信息

可用 netstat 查看套接字
应用 wireshark(windows)或 tcpdump(linux)查看协定头

—– 未完待续

连贯操作的理论过程

TCP 的三次握手

以 TCP 举例连贯操作的理论过程,先来看一下三次握手。

TCP 连贯操作的理论过程

正文完
 0