网络编程开发及实战(上)

一、什么是互联网

一、什么是互联网

1、计算机网络的定义

网络编程开发及实战(上)_第1张图片

2、计算机的分类

1)按照作用范围分类

网络编程开发及实战(上)_第2张图片

个人局域网:热点

2)按照网络的使用者分类

网络编程开发及实战(上)_第3张图片

公用网:缴费可以使用的网

专用网:军队

3、网络的网络

网络编程开发及实战(上)_第4张图片

由节点和链组成

网络编程开发及实战(上)_第5张图片

互联网:网络的网络

网络编程开发及实战(上)_第6张图片

网络编程开发及实战(上)_第7张图片

网络编程开发及实战(上)_第8张图片

1)路由器也是计算机,但不是主机,传输数据是从主机到主机,但路由器是转发作用

2)什么是互联网

网络编程开发及实战(上)_第9张图片

3)

边缘部分:主机

核心部分:广域网

网络编程开发及实战(上)_第10张图片

网络编程开发及实战(上)_第11张图片

4)边缘部分:主机-端系统

端系统有很大的区别,小的主机、摄像头,大的可能是昂贵的计算机

网络编程开发及实战(上)_第12张图片

端系统的拥有者可以是个人、单位、isp

4、互联网基础结构发展的三个阶段

网络编程开发及实战(上)_第13张图片

1)APPAnet

最初是分组交换

网络编程开发及实战(上)_第14张图片

网络编程开发及实战(上)_第15张图片

一个分组一个分组的发,最后在组装到一起

83年,TCP/IP协议以后,单个分组交换变成网络互联,90年APPnet结束

2)NSFnet

网络编程开发及实战(上)_第16张图片

90年后,大型公司入驻,美国政府淡出运营

3)互联网服务提供者ISP

科研-收费公用

网络编程开发及实战(上)_第17张图片

主干ISP全球有十几个:电信、移动、联通

地区ISP大概有十几万个

IXP:互联网交换点,方便地区ISP之间的交换

内容提供者:抖音、快手

需要服务器存放大量视频,需要庞大的网络,跟各级ISP相联,ISP越多,效率越高

网络编程开发及实战(上)_第18张图片

4)万维网

信息的传递从文字到声音、视频

网络编程开发及实战(上)_第19张图片

二、OSI七层体系结构

一、网络体系结构的形成

(一)计算机网络体系结构的形成

1、两个计算机之间通讯要解决很多问题

网络编程开发及实战(上)_第20张图片

2、解决上述问题-提出了分层结构

网络编程开发及实战(上)_第21张图片

74年,SNA-APPnet出现但是TCP/IP还没有出现

网络编程开发及实战(上)_第22张图片

3、83年,ISO/OSI七层体系结构

此时TCP/IP还没有出现,ISO失败了

失败原因:90年代后,互联网的形成,时常被TCP/IP占领等

网络编程开发及实战(上)_第23张图片

网络编程开发及实战(上)_第24张图片

4、OSI变成了国际标准

网络编程开发及实战(上)_第25张图片

网络编程开发及实战(上)_第26张图片

(二)协议与划分层次

1、

网络编程开发及实战(上)_第27张图片

1)语法:数据与控制信息

1+名字/2+内容

2)语义:何种控制信息

3)同步:发送之前同步发送内容,双方协调

2、协议的两种形式

网络编程开发及实战(上)_第28张图片

3、复杂的计算机网络是层次式的

4、透明传输-QQ、微信传输

文件传输模块:文件大小、格式、名字-QQ/vx

通信服务模块:知道文件发给谁-地区信息-系统

网络接入模块:负责网络接口细节,向上层提供接入和通信服务-网络接口

网络编程开发及实战(上)_第29张图片

5、各层需要完成的功能

网络编程开发及实战(上)_第30张图片

1)差错控制:转发错误、数据错误

2)流量控制:发送和接收速率

3)分段和重装:下载进度条,下载完整合

4)复用与分用:

复用-一个东西被多个人使用

分用-一个人提供多个服务

tcp协议为不同应用服务是分用,不同应用服务使用同一个协议是复用

5)建立链接和释放:交换数据前后

6、计算机网络的体系结构

网络编程开发及实战(上)_第31张图片

二、协议与划分层次

网络的体系结构:各层及其协议的构成

实现:遵循体系结构,用硬件和软件实现

网络编程开发及实战(上)_第32张图片

三、OSI七层体系结构

网络编程开发及实战(上)_第33张图片

1、除了互联网、局域网内部也可能会分层,局域网可能需要OSI模型

2、传输层/运输层

3、高层负责主机之间的数据传输,底层负责网络之间的数据传输

4、文件传输模块对应高层,通信模块和网络接口模块是底层

5、高层是本地,交给下层的数据或者怎样解析交付的数据,低层,交付的数据怎样发送出去,怎样接收数据交给高层。

6、高层

网络编程开发及实战(上)_第34张图片

1)应用层:QQ可以聊天,抖音可以刷视频,浏览器可以浏览网页

2)表示层:QQ聊天的文字数据、抖音视频数据,接到数据后的表示

应用层处理数据,将数据变成视频,变成文字,下层数据越小传输效率越高,表示层就负责压缩和表示

3)会话层:本地的不同应用之间的通信

7、低层

网络编程开发及实战(上)_第35张图片

1)传输层:负责数据的传输,上层应用把数据交给传输层,面对不同应用,对端口标注,不同应用对应不同端口

差错校验:端口号

2)网络层:标注不同网络的不同主机IP,从北京到上海,目的地和出发地相当于两个主机,可以寻址,如何将数据从一个IP传到另一个IP

差错校验:地址

3)数据链路层:从北京到上海,出门做那趟公交,每一段怎么走,建立数据传输的通道,管理节点之间或节点和路由器之间数据传输

差错校验

4)物理层:比特流,高低电平、频率

但是物理层还是软件层面的工作,物理传输是传输媒体的工作。物理层考虑怎样解释0和1。

三、TCP/IP协议与五层体系结构

一、TCP/IP协议族四层体系结构

1、tcp/ip和osi对等关系

网络编程开发及实战(上)_第36张图片

2、

网络编程开发及实战(上)_第37张图片

1)实际上TCP/IP实际只有三层,网络接口层没有内容,链路层使用的各种局域网标准由IEEE委员会下属工作组负责

2)路由器只参与数据转发,不参与数据处理

网络编程开发及实战(上)_第38张图片

3)TCP/IP协议的改变

网络编程开发及实战(上)_第39张图片

例:Ping命令

不需要传输层,只需要网络层协议

4)理念:网络的核心部分越简单越好,IP层只只负责主机到主机之间的地址

网络编程开发及实战(上)_第40张图片

把IP封装好,可以支持多个运输层的协议,多个运输层的协议也可以支持多个应用层的协议,IP向下又支持多个网络,有线/无线

IP支持各种异构网络,只要实现IP,就可以介入互联网

二、五层体系结构

网络编程开发及实战(上)_第41张图片

1、应用层-应用层之上是应用APP

网络编程开发及实战(上)_第42张图片

1)应用完成特定的功能,定义的是应用进程通信和交互的功能

2)交互的是报文

3)协议:DNS,HTTP,SMTP

2、运输层-UDP/TCP

UDP:不可靠

TCP:可靠传输

网络编程开发及实战(上)_第43张图片

进程间的通信-用户数据宝

差错:端口号的正确性

3、网络层

IP数据报-主机和主机之间

网络编程开发及实战(上)_第44张图片

差错:IP地址的正确性

4、链路层-节点和节点之间

网络编程开发及实战(上)_第45张图片

差错:比特差错

0010-0100

网络编程开发及实战(上)_第46张图片

1)丢弃出错

2)可靠传输-检查出错

封装成帧

5、物理层

网络编程开发及实战(上)_第47张图片

数字信号-模拟信号

6、服务器提供服务

网络编程开发及实战(上)_第48张图片

网络编程开发及实战(上)_第49张图片

四、IP地址与端口号

一、分类IP
(一)IP地址及其表示方法
1、ip地址
1)32位,4字节
2)点分十进制
网络编程开发及实战(上)_第50张图片
3)示例
网络编程开发及实战(上)_第51张图片
2、ip两级结构
1)ip是唯一的,但同一个局域网主机的ip可能相同,从同一个局域网发送信息被封装成一个ip 网络编程开发及实战(上)_第52张图片
2)发送信息给主机,先发送对应ip到局域网,再从局域网通过其他技术分发到对应主机
 3、ip的分类
网络编程开发及实战(上)_第53张图片
网络编程开发及实战(上)_第54张图片
1)
A:0~127-网络号占8位
B:128~191:网络号占16位
C:192~224:网络号占24位
D:224~
2)多归属主机:一个主机通过多个两个网卡连接两网络,该主机同时拥有两个ip地址
3)路由器:一个路由器至少有两个ip地址
4、一般不使用的特殊ip 网络编程开发及实战(上)_第55张图片
1)0-0:本网络的本主机
2)0-X:本王网络主机号位X的主机,不是完整的ip地址
3)全1-全1:本网络广播,不通过路由器转发
4)Y-全1: 对网络号Y的网络上的所有主机进行广播
5)127-非全0或者全1的任何数:用于本地网络的巡回测试
6)全0或者全1都有特殊意义
5、ip分类的不足:
网络编程开发及实战(上)_第56张图片
1)大地址块:
A:2的24次-2--- 1600万
B:2的16次-2---65533
C:2的8次-2---255
6、划分子网-解决地址浪费
网络编程开发及实战(上)_第57张图片
(适用于B类)通过子网号,一个B类地址可以划分成多个,分给不同公司
二、无分类编址CIDR
网络编程开发及实战(上)_第58张图片 网络编程开发及实战(上)_第59张图片
1、斜线标记法 网络编程开发及实战(上)_第60张图片
网络编程开发及实战(上)_第61张图片
网络编程开发及实战(上)_第62张图片
三、子网掩码
网络编程开发及实战(上)_第63张图片
1、地址掩码
网络编程开发及实战(上)_第64张图片
2、子网掩码的计算
地址掩码和ip地址按位相与
网络编程开发及实战(上)_第65张图片
3、点分10进制的子网掩码计算
网络编程开发及实战(上)_第66张图片
四、IPV6的表示方式
地球上的沙子都会有ip
网络编程开发及实战(上)_第67张图片
1、0压缩 网络编程开发及实战(上)_第68张图片
网络编程开发及实战(上)_第69张图片
注意在任一地址中,0压缩只能使用1次
五、协议端口号
网络编程开发及实战(上)_第70张图片
1、运输层的作用 网络编程开发及实战(上)_第71张图片
屏蔽作用:
网络编程开发及实战(上)_第72张图片
可靠信道和不可靠信道
网络编程开发及实战(上)_第73张图片
2、运输层的两个协议-TCP/UDP
网络编程开发及实战(上)_第74张图片
网络编程开发及实战(上)_第75张图片
3、TCP/UDP的区别
网络编程开发及实战(上)_第76张图片
网络编程开发及实战(上)_第77张图片
4、运输层的端口 网络编程开发及实战(上)_第78张图片
5、需要考虑的问题
网络编程开发及实战(上)_第79张图片
1)进程的创建和撤销都是动态的,因此发送方无法识别其他及其上的进程
2)端口号
网络编程开发及实战(上)_第80张图片
在网络传输中还需要ip地址,所以数据传输既需要ip地址,也需要端口号,端口号用于表示不同进程
网络编程开发及实战(上)_第81张图片
0不能代表端口
端口号只具有本地意义,不同主机可以有相同的主机号
网络编程开发及实战(上)_第82张图片
定位一个进程需要端口号和ip地址
6、协议端口号 网络编程开发及实战(上)_第83张图片
常用的熟知端口
网络编程开发及实战(上)_第84张图片
服务器的端口比较重要,是分用的
7、BSD端口规则
网络编程开发及实战(上)_第85张图片
网络编程开发及实战(上)_第86张图片
用户自定义5000以下的端口,有可能会和其他应用程序冲突
自定义范围建议:5000、8888
六、字节序以及IP地址转换
(一)主机字节序和 网络字节序
各个字节的存储顺序
网络编程开发及实战(上)_第87张图片
网络编程开发及实战(上)_第88张图片
网络编程开发及实战(上)_第89张图片
实际运算是小端,符合计算规律
网络通信是大端,符合读字符
判断是大端还是小端的代码:
网络编程开发及实战(上)_第90张图片
网络编程开发及实战(上)_第91张图片
网络编程开发及实战(上)_第92张图片
(二)字节序转换函数
网络编程开发及实战(上)_第93张图片
网络编程开发及实战(上)_第94张图片
(三)IP地址字节序转换函数
网络编程开发及实战(上)_第95张图片
字符串转换成32位的数据
网络编程开发及实战(上)_第96张图片
数据转换成字符串,支持IPv6
网络编程开发及实战(上)_第97张图片
1.请简要总结网络字节序形成的原因,以及网络编程中对应的处理方法。
计算机的内部处理都是小端字节序。在计算机内部,小端序被广泛应用于现代 CPU 内部存储数据;而在其他场景,比如网络传输和文件存储则使用大端序。为了避免不同类别主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序。
主机字节序到网络字节序
        u_long htonl (u_long hostlong);
        u_short htons (u_short short);
网络字节序到主机字节序
        u_long ntohl (u_long hostlong);
        u_short ntohs (u_short short);

五、socket套接字及TCP实现框架

网络编程开发及实战(上)_第98张图片

一、socket套接字

(一)socket套接字

1、本阶段的编程基于应用层的编程实现

2、体系结构:各层及其协议

实现:遵循体系结构,硬件或软件完成

网络编程开发及实战(上)_第99张图片

3、常见的网络编程接口

网络编程开发及实战(上)_第100张图片

4、socket套接字-抽象概念

网络编程开发及实战(上)_第101张图片

socket在五层结构中上面是应用层,下面是传输层,由内核负责

socket用于实现各种功能

(二)socket常用API介绍(函数接口)

1、AIP

网络编程开发及实战(上)_第102张图片

网络编程开发及实战(上)_第103张图片

可以通过以上函数写中继程序代码

1)创建套接字-设置套接字类型-协议0

2)绑定通信结构体-通信结构体是IP地址和端口号-定位进程

3)3-4函数用于服务端

4)向服务端发起连接请求-用户端

2、三元组

网络编程开发及实战(上)_第104张图片

这里的协议主要是TCP和UDP协议

和socket所在的层位置相关

3、绑定ip地址和端口号

通用地址族结构体

网络编程开发及实战(上)_第105张图片

网络编程开发及实战(上)_第106张图片

sa_family:

AF_UNIX:本地通信

需要文件地址

AF_INET:IPv4

网络编程开发及实战(上)_第107张图片

AF_INET6:IPv6(基本不用)

网络编程开发及实战(上)_第108张图片

因为绑定通信结构体不能区分本地还是网络,所以有一个通用,然后强制转化

网络编程开发及实战(上)_第109张图片

addrlen参数:是用来统一不同的通信方式结构体宽度不同的问题(ipv4/ipv6)

3、网络编程的套接字

网络编程开发及实战(上)_第110张图片

TCP/UDP/原始套接字

原始套接字可以访问底层协议

用ICMP实现ping命令

网络编程开发及实战(上)_第111张图片

流和数据报套接字都不需要设置协议,一对一,原始套接字对网络层有多个协议可以选择

4、套接字也属于一种文件类型

网络编程开发及实战(上)_第112张图片

网络编程开发及实战(上)_第113张图片

网络编程开发及实战(上)_第114张图片

(三)TCP通信的实现过程

网络编程开发及实战(上)_第115张图片

(一)服务端

网络编程开发及实战(上)_第116张图片

1、创建套接字只能用socket--返回的是大于0的整数,是一个文件描述符

2、bind:绑定函数,定义通信结构体,绑定到fd上(ip,端口号,协议)

3、listen:服务器函数,tcp服务器和客户端的区别,TCP服务器是一对多,需要建立连接,用队列管理元素

listen负责队列的长度

网络编程开发及实战(上)_第117张图片

sockfd:套接字

backlock:长度

4、accept:真正实现通信,把客户端出队,生成newfd套接字,和客户端一对一连接,accept之后才能真正和客户端连接

网络编程开发及实战(上)_第118张图片

处理客户端发来的信息,出队队列的地址信息

网络编程开发及实战(上)_第119张图片

(二)客户端

1、connect

网络编程开发及实战(上)_第120张图片

不需要socket

和绑定函数参数相同

函数总结:

1、int socket(int domain,int type,int protocol);

根据指定的地址族、数据类型和协议来分配一个套接字的描述字及其所用的资源的函数

domain:协议族/域:AF_INET(IPv4),AF_INET6(IPv6),AF_UNIX(本地)

type套接口类型:TCP协议、UDP协议、protocol:一般为0。

2、int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);绑定通信结构体,套接字绑定到一个ip,并制定一个端口号。

3、int listen(int sockfd,int backlog);监听套接字,使主动连接套接字变为被动连接套接字,使一个进程可以接收其他进程的请求。

典型的服务器程序可以同时服务于多个客户端,当有客户端发起连接时,服务器调用的accept()返回并接受这个连接,如果有大量的客户端发起连接而服务器来不及处理,尚未accept的客户端就处于连接等待状态,listen()声明sockfd处于监听状态,并且最多允许有backlog个客户端处于连接待状态,如果接收到更多的连接请求就忽略。listen()成功返回0,失败返回-1。

4、int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);处理客户端发起的连接,生成新的套接字,用于服务端,接收客户端的连接请求,成功返回一个sockfd为文件描述符,用于和客户端通信。

5、int connect(int sockfd,const struct sockaddr,socklen_t addrllen);向服务器发起连接请求

二、TCP通信的实现过程

六、TCP服务器的实现

一、TCP服务起的实现(理论)

(一)socket函数与通信域

网络编程开发及实战(上)_第121张图片

1、socket函数

网络编程开发及实战(上)_第122张图片

网络编程开发及实战(上)_第123张图片

1)协议为0,流式对应唯一的TCP

2)通信地址族

网络编程开发及实战(上)_第124张图片

(二)bind函数与通信结构体

通用地址族

网络编程开发及实战(上)_第125张图片

1、 通信地址族和通信结构体的关系

网络编程开发及实战(上)_第126张图片

2、强转

网络编程开发及实战(上)_第127张图片

3、IPv4地址族-三元组

网络编程开发及实战(上)_第128张图片

示例:

网络编程开发及实战(上)_第129张图片

(三)listen函数和accept函数

网络编程开发及实战(上)_第130张图片

backlog:任意函数

二、TCP服务器的实现代码

1、本地环回地址

网络编程开发及实战(上)_第131张图片

2、服务端代码结果

网络编程开发及实战(上)_第132张图片

空格两次因为buf缓冲区自带一次换行符

3、服务器代码

网络编程开发及实战(上)_第133张图片

网络编程开发及实战(上)_第134张图片

三、TCP服务器客户端代码

1、客户端的实现要在服务端打开的情况下

网络编程开发及实战(上)_第135张图片

2、客户端代码

网络编程开发及实战(上)_第136张图片

网络编程开发及实战(上)_第137张图片

四、代码优化

1、ip,端口号用main传参的方式

网络编程开发及实战(上)_第138张图片

2、三个参数分别是./server ip 端口号

3、优化结果

网络编程开发及实战(上)_第139张图片

4、优化代码

client.c

网络编程开发及实战(上)_第140张图片

网络编程开发及实战(上)_第141张图片

server.c:

网络编程开发及实战(上)_第142张图片

网络编程开发及实战(上)_第143张图片

网络编程开发及实战(上)_第144张图片

七、TCP并发实现

一、TCP多进程并发

1、关闭服务端客户端,先关客户端再关服务端,先关服务端再关客户端,会出现服务端仍然再使用,影响下次使用

解决办法:

网络编程开发及实战(上)_第145张图片

2、使用父子进程循环创建并发进程

网络编程开发及实战(上)_第146张图片

客户端代码不变,服务端代码:

网络编程开发及实战(上)_第147张图片

2、accept接收客户端函数

1)定义两个变量

2)设置ip

网络编程开发及实战(上)_第148张图片

网络编程开发及实战(上)_第149张图片

网络编程开发及实战(上)_第150张图片

3、把代码放到网络上运行

将目录下的所有文件上传到申请的服务器中

网络编程开发及实战(上)_第151张图片

实现网络通信:

网络编程开发及实战(上)_第152张图片

服务器本地测试:

注册端口号1024~49151

动态端口号49151~65535

服务器上的端口是注册端口号

二、僵尸进程处理

当客户端关闭,子进程结束,但服务端没有关闭,父进程没有回收子进程,会产生僵尸进程

网络编程开发及实战(上)_第153张图片

解决:

增加信号机制

SIGCHID:子进程结束,通知父进程

网络编程开发及实战(上)_第154张图片

sigaction信号函数

网络编程开发及实战(上)_第155张图片

网络编程开发及实战(上)_第156张图片

网络编程开发及实战(上)_第157张图片

替换为signal函数

网络编程开发及实战(上)_第158张图片

三、TCP并发多线程

代码:/net/server1.c

网络编程开发及实战(上)_第159张图片

八、实现UDP通信

一、函数接口扩展与UDP通信实现流(一)write/read到send/recv

网络编程开发及实战(上)_第160张图片

网络编程开发及实战(上)_第161张图片

前三个参数:send和read相同,recv和write相同

网络编程开发及实战(上)_第162张图片

MSG_PEEK:123读走,下次还是123

网络编程开发及实战(上)_第163张图片

(二)sendto与recvfrom

网络编程开发及实战(上)_第164张图片

struct sockaddr *arc_addr:

recvfrom:相当于把接收到的客户端的信息放到了结构体内。

sendto:发送到通讯结构体指定的套接字中

(三)UDP通信的实现过程

网络编程开发及实战(上)_第165张图片

1、置空函数

bzero();

头文件:#include

2、atoi:将数字字符串转换成整数

‘8888’->8888

3、htons:网络字节序和主机字节序的转化

4、inet_aton:将点分十进制的字符串转换成一个32位的网路字节序的二进制

5、如果需要缓冲区,缓冲区是需要定义的

BUFSIZ:8192

二、UDP服务器代码

网络编程开发及实战(上)_第166张图片

网络编程开发及实战(上)_第167张图片

网络编程开发及实战(上)_第168张图片

三、UDP客户端代码

服务端客户端通信:

关闭客服端重启,服务端依旧可以收到(和tcp不同)

网络编程开发及实战(上)_第169张图片

客户端代码:

网络编程开发及实战(上)_第170张图片

网络编程开发及实战(上)_第171张图片

九、TCP是如何实现可靠传输的

个功能

URG:紧急指针,置1有效,有一个紧急数据/命令

ACK:确认号,ACK为1,确认号有效

PSH:数据传完了,可以交付给应用,再确认信息中,客户端接收到服务端的缓冲区将满,催促服务端刷新缓冲区

RST:TCP通信过程中发生错误,置1中断

SYN:置1,发起一个连接请求,三次握手

FIN:置1,断开连接,四次挥手

8)紧急指针:紧急数据写到最前

面,紧急数据从哪结束,紧急指针是结束位置

9)窗口:窗口的大小,一次性发送数据的大小

10)检验和:检验TCP数据包的数据是否正确,没有问题交给应用,链路层检验的是bit位,网络层只检验包头,运输层检验整个数据包,以2字节进行计算,和链路层双保险,简单检验。

八股文:csdn-TCP协议中可靠传输的原理

十、TCP连接管理与UDP协议

一、三次握手

1、序号:seq

确认号:ack

2、连接建立-三次握手

网络编程开发及实战(上)_第172张图片

 三次握手可以避免:A发送一次,由于没有收到ACK,重新发送,导致B收到重复的报文

3、三次握手的过程

1)服务端创建序列打开

网络编程开发及实战(上)_第173张图片

2)客户端发送连接请求报文段

SYN:请求连接

网络编程开发及实战(上)_第174张图片

网络编程开发及实战(上)_第175张图片

SYN置1,不携带数据,弹药消耗一个序号

3)服务器回应

网络编程开发及实战(上)_第176张图片

seq:服务器的序号是y

ack=x+1

y也被消耗1

4)客户端发送

网络编程开发及实战(上)_第177张图片

下次发送数据从y+1开始

ACK:一个信号

ack:数据序号

建立连接:

避免SYN请求再次发送

网络编程开发及实战(上)_第178张图片

二、四次挥手

1、通讯结束后,通讯双方都可以发起释放连接

2、四次挥手过程

1)第一次回收

tcp不携带数据也会消耗一个u

网络编程开发及实战(上)_第179张图片

2)二次挥手

网络编程开发及实战(上)_第180张图片

3)三次挥手

A处于关闭状态,没有数据要再次发送,C处于半关闭状态,可能有数据还未发送

网络编程开发及实战(上)_第181张图片

4)四次挥手

A收到报文后发送一个确认

确认重传

网络编程开发及实战(上)_第182张图片

四次挥手,中间的两次有可能会合并,C发送的数据只有几个字节,有可能和二次挥手一起发完

3、定时器

网络编程开发及实战(上)_第183张图片

MSL:最大报文生存周期,C的第二次,没有收到第四次确认,可能重传第三次

2MSL:发送第四次后,C没有接收到,2MSL周期内没有冲床,说明第四次没有问题,第四次重传时间也不会超过2MSL

4、保活计时器

网络编程开发及实战(上)_第184张图片

2小时内没有发送客户信息,发送探测报文,没有相应,客户端出现故障,终止连接

三、wireshark介绍

1、运行抓包工具wireshark

sudo wireshark

2、设置抓包内容为icmp

网络编程开发及实战(上)_第185张图片

3、ping虚拟机抓包

网络编程开发及实战(上)_第186张图片

正好四次:

网络编程开发及实战(上)_第187张图片

四、wireshark抓包实验

1、虚拟机巡回抓包不会显示,因为数据不过网卡,只有过网卡的数据才会有显示。

2、https的端口号是443,用的是tcp协议,访问自己的端口号小于1024,需要加sudo

3、连接百度,抓包

网络编程开发及实战(上)_第188张图片

4、三次握手

网络编程开发及实战(上)_第189张图片

网络编程开发及实战(上)_第190张图片

5、四挥手

网络编程开发及实战(上)_第191张图片

五、UDP协议

网络编程开发及实战(上)_第192张图片

1)无连接

2)不保证可靠交付

3)面向报文,UDP一次交付一个完整的报文

4)没有拥塞控制

5)一对一,一对多,多对多

6)首部开销小,只有8个字节

网络编程开发及实战(上)_第193张图片

发送和接收都是一个报文

网络编程开发及实战(上)_第194张图片

长度:UDP数据报的长度

检验和:检验数据包的正确性

伪首部:UDP长度和长度相同

十一、IP协议与ethernet协议

一、IP包头-IP数据报的首部格式

(一)IP协议作用和意义

网络编程开发及实战(上)_第195张图片

1、链路层-IEEE802组织

2、互联网络

网络编程开发及实战(上)_第196张图片

1)路由实现的是ip协议,加路由转发协议等

2)无论是有线还是无线传输,都需要用到ip网

3、透明传输/互联网

网络编程开发及实战(上)_第197张图片

TCP/ip的一个含义:运输层和网络层

网络编程开发及实战(上)_第198张图片

卫星传输数据,路由接收

网络编程开发及实战(上)_第199张图片

(二)IP数据包首部格式

网络编程开发及实战(上)_第200张图片

1、版本:一般是IPv4

2、首部长度:4字节*5最少20字节

有可选字段

3、区分服务:优先级

网络编程开发及实战(上)_第201张图片

一般情况不使用,使用时才起作用

4、总长度:16位,0~65525

5、标识:16位,随机数,相同的标识是一组

标志:3bit,目前只用了2位

网络编程开发及实战(上)_第202张图片

MF:MF = 1,后面还有分片

MF = 0,最后一个分片

DF(最低位):DF=0允许分片

片偏移:8个字节为偏移单位

网络编程开发及实战(上)_第203张图片

7、生存时间:

网络编程开发及实战(上)_第204张图片

有些数据不能到达目的地,会在路由之间游走,生存时间可通过路由器数量,最大255,每跳一次减一

8、协议:交付或者接收是标记TCP/UDP或者其他协议

网络编程开发及实战(上)_第205张图片

9、首部检验和:只检验首部

10、协议字段指出将数据部分交给哪一个进程

网络编程开发及实战(上)_第206张图片

11、ip协议的子协议:ICMP、IGMP

(三)IP数据报分片

1、为什么要分片:在网络中传输,路由器转化数据,但是路由器没有

主机内存大,CPU高,所以内存要更高效的利用

2、MTU是ip数据报的最大长度-1500

3、ip分片

网络编程开发及实战(上)_第207张图片

最大数据段是1400

网络编程开发及实战(上)_第208张图片

二、以太网包头-链路层协议

网络编程开发及实战(上)_第209张图片

1、广播信道-以太网

网络编程开发及实战(上)_第210张图片

2、以太网的MAC帧

网络编程开发及实战(上)_第211张图片

链路层数据长度最大是1518,MTU1500+目标、源、类型、FCS

最小是64字节

网络编程开发及实战(上)_第212张图片

FCS内有CRC算法,循环冗余校验

3、

网络编程开发及实战(上)_第213张图片

帧的长度不是整数个字节:由物理层提交,不能多bit

以太网不负责重传丢弃的帧

十二、UNIX域套接字

一、UNIX域套接字理论

(一)流式套接字

网络编程开发及实战(上)_第214张图片

只需要套接字文件的路径,不需要ip和端口

网络编程开发及实战(上)_第215张图片

网络编程开发及实战(上)_第216张图片

(二)域套接字

网络编程开发及实战(上)_第217张图片

二、UNIX域流式套接字实现

man bind:示例代码

server代码:

网络编程开发及实战(上)_第218张图片

网络编程开发及实战(上)_第219张图片

网络编程开发及实战(上)_第220张图片

网络编程开发及实战(上)_第221张图片

客户端:

网络编程开发及实战(上)_第222张图片

实现代码:

网络编程开发及实战(上)_第223张图片

三、UNI域数据报套接字实现

1、写入代码

网络编程开发及实战(上)_第224张图片

你可能感兴趣的:(linux,运维,服务器)