网络

Wesley13
• 阅读 905

文章目录

  • 深入理解TCP/IP协议

  • 1、TCP/IP协议的概念

  • 2、TCP/IP的分层管理

  • 1. 物理层

  • 2. 数据链路层

  • MAC地址

  • 广播

  • 3. 网络层

  • IP协议

  • 4. 传输层

  • UDP协议

  • TCP协议

  • 5. 应用层(会话层、表示层、应用层)

  • 3、从用户角度理解TCP/IP的分层管理

  • 1. 配置静态IP地址(专业用户)

  • 2. 配置动态IP地址(普通用户)

  • DHCP协议

  • DNS协议

  • 4、TCP与UDP的区别

  • 5、TCP的三次握手与四次挥手

  • 6、常见问题解答:

  • 6.1为什么要三次握手,而不是两次握手?

  • 6.2 为什么要四次挥手?三次挥手行不行?

  • 6.3 为什么要处于TIME-WAIT状态,等待 2MSL?

深入理解TCP/IP协议

1、TCP/IP协议的概念

先看看百度的定义:

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议
网络

TCP/IP 协议是互联网相关各类协议族的总称。那么TCP/IP 协议具体包括了哪些协议呢?

协议名

全名

含义

TCP

传输控制协议(Transmission Control Protocol)

TCP 用于从应用程序到网络的数据传输控制。TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。(分割、重组)

IP

网际协议(Internet Protocol)

IP 负责计算机之间的通信。IP 负责在因特网上发送和接收数据包。

HTTP

超文本传输协议(Hyper Text Transfer Protocol)

HTTP 负责 web 服务器与 web 浏览器之间的通信。HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。

HTTPS

安全的 HTTP(Secure HTTP)

HTTPS 负责在 web 服务器和 web 浏览器之间的安全通信。作为有代表性的应用,HTTPS 会用于处理信用卡交易和其他的敏感数据。

SSL

安全套接字层(Secure Sockets Layer)

SSL 协议用于为安全数据传输加密数据。

SMTP

简易邮件传输协议(Simple Mail Transfer Protocol)

SMTP 用于电子邮件的传输。

MIME

多用途因特网邮件扩展(Multi-purpose Internet Mail Extensions)

MIME 协议使 SMTP 有能力通过 TCP/IP 网络传输多媒体文件,包括声音、视频和二进制数据。

IMAP

因特网消息访问协议(Internet Message Access Protocol)

IMAP 用于存储和取回电子邮件。

POP

邮局协议(Post Office Protocol)

POP 用于从电子邮件服务器向个人电脑下载电子邮件。

FTP

文件传输协议(File Transfer Protocol)

FTP 负责计算机之间的文件传输。

NTP

网络时间协议(Network Time Protocol)

NTP 用于在计算机之间同步时间(钟)。

DHCP

简单网络管理协议(Simple Network Management Protocol)

DHCP 用于向网络中的计算机分配动态 IP 地址。

SNMP

简单网络管理协议(Simple Network Management Protocol)

SNMP 用于计算机网络的管理。

LDAP

轻量级的目录访问协议(Lightweight Directory Access Protocol)

LDAP 用于从因特网搜集关于用户和电子邮件地址的信息。

ICMP

因特网消息控制协议(Internet Control Message Protocol)

ICMP 负责网络中的错误处理。

ARP

地址解析协议(Address Resolution Protocol)

ARP - 用于通过 IP 来查找基于 IP 地址的计算机网卡的硬件地址。(IP-MAC)

RARP

反向地址转换协议(Reverse Address Resolution Protocol)

RARP 用于通过 IP 查找基于硬件地址的计算机网卡的 IP 地址。(MAC-IP)

BOOTP

自举协议(Boot Protocol)

BOOTP 用于从网络启动计算机。

PPTP

点对点隧道协议(Point to Point Tunneling Protocol)

PPTP 用于私人网络之间的连接(隧道)。

2、TCP/IP的分层管理

TCP/IP协议里最重要的一点就是分层。TCP/IP协议族按层次分别为 ,**物理层、数据链路层、网络层、传输层、应用层(从下到上)**。当然也有按不同的模型分为4层或者7层的。采用分层结构,有利于对应用程序的设计和修改。

网络

1. 物理层

电脑要组网,就必须通过光缆、电缆、双绞线、无线电波等方式将电脑连起来。这一操作就是物理层的主要任务。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号

网络

2. 数据链路层

物理层是负责传送0和1的电信号,那电信号要怎么传呢?总不能一个一个传吧,各个厂家都有自己的一套方法,而其中占据主导的是以太网电信号分组方式

以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。

网络

①"标头"包含数据包的一些说明项,比如发送者接收者、数据类型等等;"标头"的长度,固定为18字节。

②"数据"则是数据包的具体内容。"数据"的长度,最短为46字节,最长为1500字节。

因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

MAC地址

发送者和接收者是如何知道对方就是对的人?难道也确认过眼神?

以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

网络

每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。

网络

前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

有了网卡地址,那发送者也不知道接收者的网卡地址是多少,那要怎么发送呢?这就要用到广播的方式了。

广播

一块网卡是不知道另一块网卡的MAC地址的,但是以太网数据包必须知道接收方的MAC地址,然后才能发送。

有了MAC地址,系统怎样才能把数据包准确送到接收方?

以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内(子网内)所有计算机发送,让每台计算机自己判断,是否为接收方。
网络

1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。

有了数据包的定义网卡的MAC地址广播的发送方式,数据包就可以准确的在链路层上进行多台计算机之间的传输了。

3. 网络层

广播的对象是同一个子网内的所有主机。如果两台计算机不在同一个子网络,广播是传不过去的。但是互联网是无数子网络共同组成的一个巨型网络,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。

网络

网络层的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址(IP地址)。

网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。

必定是先处理网络地址,然后再处理MAC地址。【先判断是不是同一个子网络,是的话再发送广播数据包】

IP协议

规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址

目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位(8个二进制转成一个十进制(0~255),即4个十进制数)组成。

4. 传输层

IP地址能判断两台主机是不是处于同一个子网,MAC地址能保证处于同一子网的不同主机进行数据传输。也就是有了MAC地址和IP地址,我们就可以在互联网上任意两台主机上建立通信。

同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

这时,就需要加入一位小伙伴,即端口(port)表示这个数据包到底供哪个程序(进程)使用

每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

端口065535之间的一个整数,正好16个二进制位。**0到1023的端口被系统占用,用户只能选用大于1023的端口。**不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,用来接收从互联网上发来的包。

传输层的功能,就是建立"端口到端口"的通信。网络层的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。

Unix系统把主机+端口,叫做"套接字"(socket)

UDP协议

为了在数据包中加入端口信息,就需要新的协议,制定关于端口的协议。

UDP协议,它的格式几乎就是在数据前面,加上端口号。

UDP数据包,也是由"标头"和"数据"两部分组成。

网络

"标头"部分主要定义了发送端口和接收端口,"数据"部分就是具体的内容。

把整个UDP数据包放入IP数据包的"数据"部分,再把IP数据包放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:

网络

UDP数据包非常简单,"标头"部分一共只有8个字节,总长度不超过65535字节,正好放进一个IP数据包。

TCP协议

UDP协议的优点是比较简单,容易实现。缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。而TCP协议可以看作是有确认机制的UDP协议

每发出一个数据包都要求确认,如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。(没说收到就再发一次)

TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

5. 应用层(会话层、表示层、应用层)

在7层模型中,应用层包括会话层、表示层、应用层。

应用程序收到传输层的数据,就要对其解读。应用层的作用,就是规定应用程序的数据格式。

TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了应用层。

这是最高的一层,直接面对用户。它的数据就放在TCP数据包的数据部分。

网络

3、从用户角度理解TCP/IP的分层管理

**总的来说,网络通信就是交换数据包。**电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信。

网络
发送一个数据包,必须要对方的MAC地址、 对方的IP地址,有了这两个地址,数据包才能准确送到接收者手中。

MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发。

网络

1号电脑要向4号电脑发送一个数据包,它先判断4号电脑是否在同一个子网络,结果发现不是,于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。而1号电脑把数据包发到网关A,必须知道网关A的MAC地址,由于1号电脑和网关A是属于同一个子网的,故可以通过广播的方式将数据包准确发送到网关A。

发送数据包之前,电脑必须根据IP地址判断对方是否在同一个子网络,然后选择相应的MAC地址。

1. 配置静态IP地址(专业用户)

网络

配置静态IP地址必须要知道:本机IP地址、子网掩码、网关地址的IP地址、DNS的IP地址,缺一不可。

2. 配置动态IP地址(普通用户)

动态IP地址,指计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫做DHCP协议。

这个协议规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做"DHCP服务器"。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。

如果两台计算机在同一个子网络,必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新加入的计算机不知道这两个地址,怎么发送数据包呢?

DHCP协议

DHCP协议是一种应用层协议,建立在UDP协议之上。

网络

请求:新加入子网的计算机向"DHCP服务器"发送一个"DHCP请求"数据包
1、最前面的"以太网标头",设置发送方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。本机的MAC地址是已知的,DHCP服务器的MAC地址不知道,先用广播地址:FF-FF-FF-FF-FF-FF代替。
2、后面的"IP标头",设置发送方的IP地址和接收方的IP地址。对于本机而言,两个都不知道,故先设置发送方的IP地址就为0.0.0.0,接收方的IP地址为255.255.255.255。
3、最后的"UDP标头",设置本机的的端口和DHCP服务器的端口。这一部分是DHCP协议规定好的,本机是68端口,DHCP服务器是67端口。
由上述规则可以看出,数据包是由本机MAC地址+0.0.0.0+68发送到FF-FF-FF-FF-FF-FF+255.255.255.255+67。
由于以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF`,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道"这个包是发给我的",而其他计算机就可以丢弃这个包。

应答:DHCP服务器在收到"DHCP请求"后,发送一个"DHCP响应"给新入网的计算机。
DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个"DHCP响应"数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发送方)和255.255.255.255(接收方),UDP标头的端口是67(发送方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。

DNS协议

发送数据包,必须要知道对方的IP地址。若只知道网址www.baidu.com,不知道它的IP地址,DNS协议可以帮助我们,将这个网址转换成IP地址。【域名转换为IP地址,也叫正向解析

4、TCP与UDP的区别

TCP和UDP 都是传输层协议

网络

面向报文:应用层交给UDP多长的报文,UDP就发送多长的报文,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。【来多少发多少】

面向字节流:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。【来太多,分开发】

5、TCP的三次握手与四次挥手

客户端和服务端之间的通信

网络

如果有大量的连接,每次在连接,关闭都要经历三次握手、四次挥手,这显然会造成性能低下。因此。http 有一种叫做长连接(keepalive connections)的机制。它可以在传输数据后仍保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无需再次握手。

网络

6、常见问题解答:

在理解以下问答时,可结合三次握手和四次挥手的表格理解。

6.1为什么要三次握手,而不是两次握手?

答:为了防止失效的连接请求被服务端接收到,导致服务端回复一个ack确认报文段,由于是两次握手,客户端和服务端此时已经建立连接,且客户端确认了服务端能收到数据包,就一直发送数据包给服务端。但是服务端未收到来自客户端的ack确认报文段,就会忽略客户端发送的数据包,一直等待客户端发送ack报文段。这就浪费了服务端的连接。

通俗一点理解三次握手和两次握手: 场景:A和B微信聊天
三次握手:
①A:你好,有空吗?
②B:有空,你有空嘛?
③A:我也有空。
到目前为止两个人都确认了对方现在有空,所以就巴拉巴拉的讲事情(通信)。

两次握手:
①A:你好,有空吗?
②B:有空。
这时,只能确定B有空,而A不一定有空。此时A和B也巴拉巴拉的讲事情。

这就会存在一个问题,如果A发第一条信息,信号不好,B没收到,然后A发第二条信息,这时B回复收到了。由于是两次握手,这时就已经建立了连接,然后A和B讲完事情就没联系了。这时,之前延迟的A的信息,终于发到B的微信上了,这时B回复收到,那么就会再次建立连接,但是问题来了,此时A不在线,那么B就一直等,B的连接资源就浪费了。

6.2 为什么要四次挥手?三次挥手行不行?

答:在关闭连接时,若只有三次挥手,即当服务器发送fin报文段给客户端时,服务端就关闭了连接。若该fin报文段在网络中丢失,服务端不能重发fin报文段,而此时客户端又处于FIN_WAIT_1状态,客户端没收到服务端的关闭请求,就一直等,导致客户端无法关闭连接。故需要四次握手,让客户端能确认服务端也没数据包要发送了,确认服务端发送了关闭请求过来,这时服务端关闭后,客户端才关闭。

6.3 为什么要处于TIME-WAIT状态,等待 2MSL?

答:因为当客户端收到服务端发来的fin报文段,客户端回复了服务端后就直接进入CLOSED状态,而不是TIME-WAIT状态。此时若该回复丢失,那么服务端就会再次发来fin报文段,但是由于客户端已经关闭,那服务端就永远都关闭不了了。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
34.TCP取样器
阅读文本大概需要3分钟。1、TCP取样器的作用   TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据。2、TCP取样器详解!(https://oscimg.oschina.net/oscnet/32a9b19ba1db00f321d22a0f33bcfb68a0d.png)TCPClien
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这