从零开发B/S机架应用程序(十)网络通信上

简述

在我们使用客户端的时候,客户端是如何通信的呢?
下面就简单的说说看

通信流程

下面是流程图
这里写图片描述

通信的基础是TCP/IP模型

服务器搭建

服务器搭建流程

网络通信的基础知识

TCP/IP 四层协议
这里写图片描述

  • 应用层:为网络排错,文件传输,远程控制和 Internet 操作提供具体的应用程序
  • 传输层:为网络提供了流量控制,错误控制和确认服务. TCP(传输控制协议)和 UDP(用户数据报协议).
  • 网络层:提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换.在 TCP / IP 协议族中,网络层协议包括 IP 协议(网际协议),ICMP 协议( Internet 互联网控制报文协议),以及 IGMP 协议( Internet 组管理协议)
  • 网络接口层:主要是指物理层次的一些接口,比如电缆等.

TCP报文段首部格式
此部分是传输层数据封装,封装后给网络层,IP数据包
这里写图片描述

  • 源端口和目的端口:各占2个字节。
  • 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  • 确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效Ack=Seq+1。
  • 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
  • (A)URG:紧急指针(urgent pointer)有效。
  • (B)ACK:确认序号有效。
  • (C)PSH:接收方应该尽快将这个报文交给应用层。
  • (D)RST:重置连接。
  • (E)SYN:发起一个新连接。
  • (F)FIN:释放一个连接。

需要注意的是:

  1. 不要将确认序号Ack与标志位中的ACK搞混了。
  2. 确认方Ack=发起方Req+1,两端配对。

数据包
这里写图片描述

  • 在 TCP / IP 协议中数据先由上往下将数据装包,然后由下往上拆包。
  • 在装包的时候,每一层都会增加一些信息用于传输,这部分信息就叫报头。
  • 当上层的数据到达本层的时候,会将数据加上本层的报头打包在一起,继续往下传递.
  • 在拆包的时候,每一层将本层需要的报头读取后,就将剩下的数据往上传.(俄罗斯套娃来形容这个过程.)

网络接口层

这一块主要主要涉及到一些物理传输,比如以太网,无线局域网.这里就不做详细的介绍了

网络层/IP数据报

TCP/IP协议定义了一个在局域网上传输的包,称为IP数据报(IP Datagram)。

IP数据报由两部分组成

  • 首部
  • 数据

TCP数据报与IP数据报的关系

  • IP数据包包含 tcp数据包 udp数据包,IP是第三层(网络层)的协议,
  • TCP与UDP都属于第四层(传输层)的协议。

以后详细展开
IP 地址分为两个部分:

  • 网络 ID
  • 主机 ID
    但是具体哪部分属于网络 ID,哪些属于主机 ID 并没有规定.
  • A 类地址:IP 地址的前 8 位代表网络 ID ,后 24 位代表主机 ID。
  • B 类地址:IP 地址的前 16 位代表网络 ID ,后 16 位代表主机 ID。
  • C 类地址:IP 地址的前 24 位代表网络 ID ,后 8 位代表主机 ID。

应用层
应用层做为 TCP/IP 协议的最高层级,对于我们移动开发来说,是接触最多的。
同样的,由于应用层我们需要涉及的东西太多,具体的介绍我们将在之后的文章中进行
- 运行在TCP协议上的协议:
- 运行在UDP协议上的协议:
- 其他:


SocKet
 套接字

TCP服务端
- socket与IP和端口号链接是绑定 (bind)
- listen监听,赋予监听能力
- accept与Tcp客户端connect 建立三次握手

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
在socket编程中,这一过程由客户端执行connect来触发
这里写图片描述

确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。

  • (1)第一次握手:Client将标志位SYN置为1,随机产生一个值(序列号)seq=J(200),并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  • (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,(确认号)ack=J(200)+1,随机产生一个值(序列号)seq=K(500),并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  • (3)第三次握手:Client收到确认后,检查(确认号)ack是否为J(200)+1,ACK是否为1,如果正确则将标志位ACK置为1,(确认号)ack=K(500)+1,并将该数据包发送给Server,Server检查(确认号)ack是否为K(500)+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了.

TCP/IP数据封装包
协议加工过程
这里写图片描述

比如数据Hello ,进行封包

这里写图片描述

  • linux核心模块网络管理,可以进行Soxket API 网络编程
  • Socket就是建立一个通道,每次建立一个Socket通道就是建立一个协议的加工厂
  • 协议加工长中有 端口号,IP,以太网协议
  • 点到点(PC之间通过Ip号来锁定),端到端(PC唯一的进程(端口号));比如两个电脑上各开启两个QQ,其中每个电脑的QQ都有相同的IP,不同的端口号
  • 互联网的唯一锁定是:IP + 端口号

猜你喜欢

转载自blog.csdn.net/osean_li/article/details/80786205
今日推荐