「Netty系列」彻底弄清网络七层协议TCP/IPIPTCP(Netty前置一)

Posted 花花和Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「Netty系列」彻底弄清网络七层协议TCP/IPIPTCP(Netty前置一)相关的知识,希望对你有一定的参考价值。

目前工作中使用Netty进行服务端开发,在实践中有自己一点点心得。接下来分享Netty系列文章。在学习Netty之前先了解下网络基础知识、分清网络七层协议、TCP/IP协议族、IP、TCP各代表什么含义。

一 基础

1.1 概述

1 网络分层中的ios七层模型、TCP/IP协议族、TCP、IP,这些有什么不同
2 TCP协议通信过程中的三次握手和四次挥手到底是什么流程?

1.2 软件架构

在生活中,我们经常用QQ、微信、百度云盘、Goole、IE浏览器、火狐浏览器......。可以总结为两大类,c/s(客户端/服务端)和b/s(浏览器/服务器)结构。这两种架构是两台计算机通过某种协议来网络中进行通信。

1.3 基本概念(通信协议/ip/端口)

  1. 通信协议 就是定义了在网络中计算机之间进行通信的一种规则。因为电脑是由许许多多加的厂商来做的,如果传出的数据格式不一样、传输数据格式、解析数据的格式不一样,就没法实现所有电脑通信。

  2. ip 在整个网络中,电脑的唯一标识。ip分为IPV4和IPV6,ipv4占用4个字节,ipv6占用16个字节。目前使用较多的还是ipv4。

  3. 端口 在计算机中,进程的唯一标识。端口号是用两个字节表示,取值范围为0-65535,0-1023基本为系统端口,我们写的程序端口号应在1024以上。

二 计算机通信分层

2.1 七成模型、TCP/IP协议族、TCP、IP这些是不是同一个东西?

1 ISO国际标准组织在研究网络通信,建立了OSI模型(开放系统互联参考模型)。即为标准的7层架构。(理论上分层模型)
2 TCP/IP协议族,最早由美国国防部的ARPA网项目,也被DoD模型。(实践过程中的模型)
3 TCP,IP这是网络分层中具体的协议。

2.2 访问淘宝经历了网络流程

「Netty系列」彻底弄清网络七层协议、TCP/IP、IP、TCP(Netty前置一)1 我们在浏览器输入淘宝的网址。
2 (本机)浏览器将请求发送,应用层-》传输层-》网络层-》数据链路层
3 (网络传输过程)-》到路由器-》交换机
4 (淘宝服务器)-》到达淘宝服务器-》链路层-》网络层-》传输层-》应用层,获取数据
5 (响应数据)-》然后再原路返回。

三 网络传输层解析

3.1 Socket是什么?

Socket是位于应用层和传输层的一个抽象层。提供了一套接口来调用TCP/IP协议的API。「Netty系列」彻底弄清网络七层协议、TCP/IP、IP、TCP(Netty前置一)

3.2 Socket通信流程

「Netty系列」彻底弄清网络七层协议、TCP/IP、IP、TCP(Netty前置一)

3.3 网络传输层的TCP协议详解

  1. 概述 TCP是Transmission COntrol Protocol的简称,中文名也叫做传输控制协议。它具有的特性如下。
    a 数据传输前必须要建立连接,数据传输完,必须释放连接。
    b 传输的数据无差错,不丢失,不重复,且顺序和源数据一致。
    c 在传输的过程中,数据拆分为不同的段,也就是segment。
    d 效率低,因为是面向连接的协议,通信之前必须要建立连接。

  2. TCP首部进行详解源端口和目的端口:数据从哪个进程来到哪个进程去。

序号和确认号:TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传输流中,每个字节一个序号。

URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段 只有当URG=1时才有效。

ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才 有效。TCP规定,连接建立后,ACK必须为1。

PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据 提交给上层,而不是缓存起来。

RST:只有当RST=1时才有用。如果你收到一个RST=1的报文,说明你与主机的连接出现了严重错误(如 主机崩溃),必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝 响应。

SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的 报文。只有在前两次握手中SYN才置为1。

FIN:标记数据是否发送完毕。如果FIN=1,就相当于告诉对方:“我的数据已经发送完毕,你可以释放 连接了。

窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而 达到流量控制。

选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接 方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本 端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中 加入额外的零,以保证TCP头是32的整数倍

数据部分:TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段 仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时 的许多情况中,也会发送不带任何数据的报文段。


END


公众号简介
公众号福利


以上是关于「Netty系列」彻底弄清网络七层协议TCP/IPIPTCP(Netty前置一)的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络

TCP/IP 七层网络模型 三次握手

网络编程:TCP/IP 四层协议,OSI七层协议模型,协议封装,TCP 协议头部,三次握手

网络编程

网络TCP/IP基础(OSI七层网络参考模型协议及原理)

从网络到分布式——TCP/IP协议簇与OSI七层网络模型