目录
前言
主要用c语言写一个服务器,客户端不断向服务器发送1000字节的数据,服务器收到后对该数据进行取反,然后再发送给客户端,客户端判断该取反数据和原始发送数据是否一致。完成这个小demo以后,准备把从头到尾接触的知识全部记录下来。
一、网络的基本概念
1.1 网络的物理结构
数据如何从一台机器传送到另一台机器上面?首先介绍几个物理结构
主板上的网口:
网线和水晶头:
一块独立的网卡:
中断接口→操作系统→网络数据接收接口就会有数据
常见的网络连接方案:
数据→系统(OS)→网卡→路由器→modem(光猫盒)→互联网→modem(光猫盒)→路由器→网卡→系统(OS)→接收程序
1.2 网络中的地址
并不是所有的地址都是可以用的
32位网络地址由四个字节构成
255*255*255*255
1、 以0开头的地址,都是不可以用的
2 、以0结尾的地址,表示的是网段,而不是具体的地址
3 、224开头到239开头的地址,是组播地址,不可用于点对点的传输
4 、240开头到255开头的地址,是实验用的,保留,一般不做服务器或者终端地址
127.0.0.1保留的 回环网络的地址
0.0.0.0保留的,一般用于服务器监听的,表示全网段监听
组播可以理解为tcp/udp上面的广播,可以极大的节约带宽
问题:容易形成网络风暴
A类、B类、C类用于不同规模(大、中、小型)的网络
D类用于组播(类似广播)
E类保留,用于实验、私有网络
注意上述地址中缺少两个点,分别是0.0.0.0和127.0.0.X
0.0.0.0用于服务器监听的时候使用
意思是监听本机上所有的地址
大型服务器大部分都是有多个地址的
127.0.0.1是本机网络,往这个网络发任何数据,都会被回发回来
1.3 网络中的端口
公认端口(常用端口):这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。 例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会像木马这样的黑客程序利用。
注册端口:端口号从1025~49151,它们松散地绑定于一些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义。
动态和/或私有端口(Dynamic and/or Private Ports):端口号从49152到65535(不要轻易作为服务器的监听端口)。
理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。
端口并非只有服务器才会使用,客户端也一样会使用端口
1.4 什么是协议?
TCP协议包头说明:
HTTP协议包头样例(文本包头):
GET /search/detail?ct=503316480&z=0&ipn=d
HTTP/1.1
Host: pic.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
SSH数据包头结构:
协议就是一种网络式交互中数据格式和交互流程的约定
通过协议,我们可以与远程的设备进行数据交互
请求或者完成对方的服务
协议就是计算机中的语言
1.5 TCP协议基础
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议
可靠的协议
UDP协议 不可靠的协议
TCP协议是可靠的,但是牺牲了性能
基于字节流
可以发1个字节,也可以发1万个字节
数据是字节流
交互流程: