网络编程基础知识

http://t.csdnimg.cn/ehVt5

网络发展史

课程简介

课程共七天,旨在让大家对网络编程进行基本认识,并在Linux下实现多机通信。

学习形式以及要求

  1. 授课方式:腾讯会议
  2. 授课笔记:腾讯文档
  3. 课堂要求:课时认真听讲,学习状态饱满,积极反馈,手机上交

4.课下要求:

按时完成作业 作业截止时间晚22.30

对课上知识点不懂的地方要大胆问!切忌似是而非、得过且过!

本门课程比较综合,需要把前面课程相应没学扎实的地方进行巩固

网络发展史

【腾讯文档】internet历史

百度安全验证

internet历史

一、 局域网和广域网

1.局域网(LAN)

局域网的缩写是LAN,local area network,顾名思义,是个本地的网络,只能实现小范围短距离的网络通信。我们的家庭网络是典型的局域网。电脑、手机、电视、智能音箱、智能插座都连在路由器上,可以互相通信。局域网,就像是小区里的道路,分支多,连接了很多栋楼

2 . 广域网 (Wan)

广域网(Wide Area Network)是相对局域网来讲的,局域网的传输距离比较近,只能是一个小范围的。如果需要长距离的传输,比如某大型企业,总部在北京,分公司在长沙,局域网是无法架设的。广域网,就像是大马路,分支可能少,但类型多,像国道、省道、高速、小道等,连接了很多大的局域网。

这时需要其它的解决方案。

第一,通过因特网,只需要办一根宽带,就实现了通信,非常方便,现在的宽带价格也比较便宜。

第二,通过广域网专线。

所以为了数据安全,不能连接因特网,需要用一条自己的专用线路来传输数据,这条线路上只有自己人,不会有其他人接入,且距离很远,这个网络就叫 "广域网"。

光猫

光猫是一种类似于基带modem(数字调制解调器)的设备,和基带modem不同的是接入的是光纤专线,是光信号。用于广域网中光电信号的转换和接口协议的转换,接入路由器,是广域网接入。

将光线插入左侧的灰色口,右侧网口接网线到路由器即可。

交换机与路由器

交换机(二层):用于局域网内网的数据转发 路由器(三层):用于连接局域网和外网

路由器有二层交换机的功能,反之不成立,二层交换机没有IP分配和IP寻址的功能。

交换机各个口是平等的,所有接入的设备需要自己配置IP,然后组成局域网。

路由器需要区分WAN口和LAN口,WAN口是接外网的(从Modem出来的或者从上一级路由器出来的),LAN口是接内网的,现在路由器都带无线功能,本质上无线接入就是LAN。

二、 IP地址

1、 基本概念

1) IP地址是Internet中主机的标识,本质: 二进制

IP地址一般分割为 4个八位二进制的数(4字节-32位)

2) Internet中的主机要与别的机器通信必须具有一个IP地址

3) IP地址(长度)为32位(IPv4,128位(IPv6) 目前ipv6还未普及,主要学习ipv4

4)每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由

5)表示方法 : 点分十进制

点分十进制表示就是用4组从0~255的数字,来表示一个IP地址。

2、 ip地址划分(IPv4)

二级划分 ip=网络号+主机号

网络号: 网络号:表示是否在一个网段内,用于区分网段 (同一网段为同一局域网 表示是否在一个网段内(局域网)

主机号:标识在本网段内的ID,同一局域网不能重复

主机号的第一个和最后一个都不能被使用,第一个作为网段号,最后一个最为广播地址。

复制代码
A类:0开头,网络号七位,主机号24位(不能全0或全1,全0或全1是网段分隔)`
`网络号取值范围:1.0~127.255`
`主机号取值范围:1.0.0.1~126.255.255.254`
`A类:(0.0.0.0-127.255.255.255)(默认子网掩码:255.0.0.0)`
`第一个字节为网络号,后三个字节为主机号(一个字节占8位)。该类IP地址的最前面为"0",因为网络号是8位,所以地址的网络号取值于 0~127之间(0000 0000)(0111 1111)。`
`一般用于大型网络,主机号取值在0 - 2 ^24之间.  127.0.0.1:本机回环地址    10`

`B类:10开头,网络号14位,主机号16位,每个网段最多65534个主机号`
`网络号取值范围:128.0~191.255`
`主机号取值范围:128.0.0.1~~191.255.255.254`
`B类:(128.0.0.0-191.255.255.255)(默认子网掩码:255.255.0.0)`
`前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为"10",所以地址的网络号取值于128~191之间。`
`一般用于中等规模网络。`

`C类:110开头,网络号21位,主机号8位,每个网段254个主机号`
`网络号取值范围:192.0.0~223.255.255`
`主机号取值范围:192.0.0.1~~223.255.255.254   `
`C类:(192.0.0.0-223.255.255.255)(子网掩码:255.255.255.0)`
`前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为"110",所以地址的网络号取值于192~223之间。`
`一般用于小型网络(一般教室使用的是C类)。`

`D类(组播地址):224.0.0.1~~239.255.255.254`
`D类:(224.0.0.0- 239.255.255.255)是多播地址。`
`该类IP地址的最前面为"1110",所以地址的范围取值于224~239之间。`
`一般用于组播用户,组播通信。`

`E类:保留待用   11110`
`E类:是保留地址。该类IP地址的最前面为"1111",所以地址的取值取值于240~247之间。`
`一般是一些保密单位用得到,平时基本不会用到`

`

主机号要求:掐头去尾,全0不行,全1不行

3、 特殊地址

0.0.0.0:在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。

127.0.0.1:回环地址/环路地址,所有发往该类地址的数据包都应该被loop back。

4、 命令:ifconfig 查看配置

5、 子网掩码

● 子网掩码:是一个32位的整数,作用是将某一个IP划分成网络地址和主机地址;

● 子网掩码长度是和IP地址长度完全一样;

网络号全为1,主机号全为0

将IP地址拆分成网络号和主机号

网络号:IP与子网掩码相与结果为网络号

公式:网段号=IP & MASK(子网掩码)

主机号:子网掩码取反,与IP相与为主机号

公式:主机号=IP&(~MASK)

A 255.0.0.0

B 255.255.0.0

C 255.255.255.0

例、

192.168.75.129

255.255.255.0

复制代码
1100 0000 1010 1000 0100 1011 1000 0001.`
`1111 1111 1111 1111 1111 1111 0000 0000`
` ip & 子网掩码 1& a=a  0&a=0`
` 192.168.75.0`
 
` ip & (~子网掩码)`
` 1100 0000 1010 1000 0100 1011 1000 0001.`
` 0000 0000 0000 0000 0000 0000 1111 1111`
` 0.0.0.129`
`

http://t.csdnimg.cn/lrrs8

假设 : 1000台计算机接入同一局域网,要求不能浪费ip

C类254、B类65534

子网号概念 二次组网

三级地址 ip=网络号+子网号+主机号

网络号+子网号 - 网段(网络地址)

2byte+6bit 10bit,B类网只用10位当作主机号

设置子网掩码(直接设置)

255.255.1111 1100 0000 0000

255.255.252.0

练习

练习1

已知一个子网掩码号为255.255.255.192,问,最多可以连接多少台主机?

62

练习2

某公司有四个部门:行政、研发1、研发2、营销,每个部门各30台计算机接入公司局域网交换机,如果要在192.168.1.0网段为每个部门划分子网,子网掩码应该怎么设置,每个子网的地址范围分别是什么?(4个部门之间不能通信)

255.255.255.192子网掩码

192.168.1.10 00 0000

192.168.1.10 00 0001→192.168.1.1011 1110

192.168.1.129→192.168.1.190

192.168.1.01 000 0000

192.168.1.0100 0001→192.168.1.0111 1110

192.168.1.65→192.168.1.126

192.168.1.11 00 0000

192.168.1.1100 0001 192.168.1.1111 1110

192.168.1.193→192.168.1.254

192.168.1.00 00 0000

192.168.1.0000 0001 192.168.1.0011 1110

192.168.1.1→192.168.1.62

练习3

有两台电脑主机,在最少浪费IP地址的情况下,将172.16.14.4与172.16.13.2划归为同一网段,则子网掩码应该设置为?

172.16.14.4

172.16.0000 1110 .0000 0100

172.16.13.2

172.16.0000 1101.0000 0010

复制代码
172.16.0000 11 10.0000 0100`
`172.16.0000 11 01.0000 0010`
`

三、 网络模型

1 网络的体系结构

  1. 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。
  2. 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务
  3. 网络体系结构即指网络的层次结构和每层所使用协议的集合
  4. 两类非常重要的体系结构:OSI与TCP/IP

2 OSI模型

  1. OSI模型是一个理想化的模型,尚未有完整的实现
  2. OSI模型共有七层
  3. OSI现阶段只用作教学和理论研究

物 数 网 传 会 表 应

复制代码
OSI模型`
`OSI模型是最理想的模型`
`物理层:传输的是bit流(0与1一样的数据),物理信号,没有格式`
`链路层:格式变为帧(把数据分成包,一帧一帧的数据进行发送)`
`网络层:路由器中是有算法的,ip,(主机到主机)(路由的转发)`
`传输层:端口号,数据传输到具体那个进程程序(端到端)`
`会话层:通信管理,负责建立或者断开通信连接`
`表示层:确保一个系统应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据加密,解密;`
`应用层:指定特定应用的协议,文件传输,文件管理,电子邮件等。`
`

3、 TCP/IP模型

应用层 :应用协议和应用程序的集合。

传输层 :端到端 ,决定数据交给机器的哪个任务(进程)去处理,通过端口寻址

网络层 :提供设备对设备的传输,可以理解为通过IP寻址机器。

网络接口和物理层 :屏蔽硬件差异(驱动),向上层提供统一的操作接口。

DNS域名解析协议

4 常见网络协议

复制代码
网络接口和物理层:`
	`ppp:拨号协议(老式电话线上网方式)`
	`ARP:地址解析协议  IP-->MAC`
	`RARP:反向地址转换协议 MAC-->IP`
`网络层:`	
	`IP(IPV4/IPV6):网间互连的协议`
	`ICMP:网络控制管理协议,ping命令使用`
	`IGMP:网络分组管理协议,广播和组播使用`
`传输层:`
	`TCP:传输控制协议`
	`UDP:用户数据报协议`
`应用层:`
	`SSH:加密协议`
	`telnet:远程登录协议`
	`FTP:文件传输协议`
	`HTTP:超文本传输协议`
	`DNS:地址解析协议`
	`SMTP/POP3:邮件传输协议`
`

注意:TCP和IP是属于不同协议栈层的,只是这两个协议属于协议族里最重要的协议,所以协议栈或者模型以之命名了。

TCP和UDP

共同点:都工作在传输层

TCP (即传输控制协议):

复制代码
是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、`
`数据无失序、数据无重复到达的通信)`
`适用情况:`
`1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议`
`2、适合于对传输质量要求较高,以及传输大量数据的通信。`
`

UDP : 用户数据报协议

复制代码
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。`
`即时性`
`1、发送小尺寸数据(如对DNS服务器进行IP地址查询时)`
`2、QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议`
`3、流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输`
`

UDP TCP 协议相同点:都存在于 传输层 ,全双工通信

单工:只能单方向传输信息

半双工:在同一时刻只能单方向传输信息

全双工:可以双向同时传输信息

1 TCP:全双工通信,面向连接,可靠

TCP(即传输控制协议) :是一种面向连接的传输层协议 ,它能提供高可靠性通信

(即数据无失误、数据无丢失、数据无失序、数据无重复到达的通信)。

高可靠性原因

  1. 三次握手,四次挥手机制

  2. 序列号和应答号机制

  3. 超时/错误 重传机制

适用场景:

适合于对传输质量要求较高的通信

在需要可靠数据传输的场合,通常使用TCP协议

微信 /QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

2、UDP:全双工通信,无连接,不可靠

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

适用场景

发送小尺寸数据(如对DNS服务器进行IP地址查询时)

适合于广播/组播式通信中。

QQ/ 微信 等即时通讯软件 音视频通讯通常采用UDP协议

3、 Dos(拒绝式服务)攻击?

复制代码
DOS:即Denial Of Service,拒绝服务的缩写,拒绝服务,DOS攻击即攻击者想办法让目标机器停止`
`提供服务或资源访问,这些资源包括磁盘空间、内存、进程甚至网络带宽,从而阻止正常用户的访问。`

`要对服务器实施拒绝服务攻击,主要有以下两种方法: `
`①迫使服务器的缓冲区满,不接收新的请求;`
`②使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接,这也是DoS攻击实施的基本思想。`
`为便于理解,以下介绍一个简单的DoS 攻击基本过程:攻击者先向受害者发送大量带有虚假地址的请求,`
`受害者发送回复信息后等待回传信息。由于是伪造地址,所以受害者一直等不到回传信息,`
`分配给这次请求的资源就始终不被释放。当受害者等待一定时间后,连接会因超时被切断,`
`此时攻击者会再度传送一批伪地址的新请求,这样反复进行直至受害者资源被耗尽,最终导致受害者系统瘫痪。`
`

编程预备知识

1、 socket简介

复制代码
1》1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口`
`2》1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信`
`3》现在很多应用 (FTP, Telnet) 都依赖这一接口 `

`Socket`
` 1、是一个编程接口`
` 2、是一种特殊的文件描述符 (everything in Unix is a file)`
` 3、并不仅限于TCP/IP协议`
` 4、面向连接 (Transmission Control Protocol - TCP)`
` 5、无连接 (User Datagram Protocol -UDP )`
 
`为什么需要Socket?`
`  普通的I/O操作过程 `
`  •打开文件->读/写操作->关闭文件 `
`  •TCP/IP协议被集成到操作系统的内核中,引入了新型的"I/O"操作 `
`  •进行网络通信的两个进程在不同的机器上,如何连接?`
`  •网络协议具有多样性,如何进行统一的操作 `
`需要一种通用的网络编程接口:Socket`
`

2、 socket类型--

流式套接字(SOCK_STREAM) TCP

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

数据报套接字(SOCK_DGRAM) UDP

提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字(SOCK_RAW)

可以对较低层次协议如IP、ICMP直接访问。

3、 socket作用

4、 Socket的位置

端口号

  • 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区分
  • TCP端口号与UDP端口号独立
  • 端口用两个字节来表示 2byte(65535个)
复制代码
众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)`
`已登记端口:1024~49151    (选1000以上10000以下) `
`动态或私有端口:49152~65535`
`

字节序

小端序(little-endian) - 低序字节存储在低地址

大端序(big-endian) - 高序字节存储在低地址

网络中传输一字节以上的带类型的数据(比如short、int),必须使用网络字节序,即大端字节序。

查看主机是大端序还是小端序。

网络传输中,需要将每个主机的主机字节序(CPU决定),转换为网络中统一顺序的网络字节序

才能供双方主机去识别

只需要转换IP和port就可以,不需要转换传输的数据包的字节序

因为IP和port为 4个字节和2个字节, 而数据报一般都为char类型, 占一个字节

根据字节序的性质,内存存储大于一个字节类型的数据在内存中的存放顺序

所以char类型并不具有字节序的概念

1.主机字节序到网络字节序 (小端序->大端序)

复制代码
#include <arpa/inet.h>`
`u_long htonl` `(u_long hostlong);` `//host to internet long`
`功能:将无符号整数hostlong从主机字节顺序转换为网络字节顺序。`
`#include <arpa/inet.h>`
`u_short htons` `(u_short short);`  `//掌握这个`
`功能:将无符号短整数hostshort从主机字节顺序到网络字节顺序。`
`

2.网络字节序到主机字节序(大端序->小端序)

复制代码
#include <arpa/inet.h>`
`u_long ntohl` `(u_long hostlong);`
`功能:将无符号整数netlong从网络字节顺序转换为主机字节顺序。`
`#include <arpa/inet.h>`
`u_short ntohs` `(u_short short);//端口 2byte`
`功能:将无符号短整数netshort从网络字节顺序转换为主机字节顺序。的`
`
复制代码
#include <stdio.h>`
`#include <arpa/inet.h>`

`int main(int argc, char const *argv[])`
`{`
`    int a = 0x12345678;`
`    //小端转大端`
`    int b = htonl(a);`
`    printf("%#x\n", b);`
`    //大端转小端`
`    int c = ntohl(b);`
`    printf("%#x\n", c);`
`    return 0;`
`}`
`

八、 IP地址转换

1 inet_addr 主机字节序转换为网络字节序

复制代码
#include<sys/socket.h>   `
`#include<netinet/in.h>               `
`#include<arpa/inet.h>`
`in_addr_t`  `inet_addr(const` `char` `*strptr);`  `//该参数是字符串`
 
`typedef` `uint32_t` `in_addr_t;`
`struct` `in_addr` 
`{`
    `in_addr_t s_addr;`
`};`
`功能:  主机字节序转为网络字节序`
`参数:`  `const` `char` `*strptr: 字符串`
`返回值: 返回一个无符号长整型数(无符号32位整数用十六进制表示),` 
`      否则NULL`

`

2 inet_ntoa 网络字节序转换为主机字节序

复制代码
#include <sys/socket.h>`
`#include <netinet/in.h>`
`#include <arpa/inet.h>`
`char` `*inet_ntoa(struct` `in_addr inaddr);`
`功能:   将网络字节序二进制地址转换成主机字节序。 `
`参数:`  `struct` `in_addr in addr  : 只需传入一个结构体变量`
`返回值:  返回一个字符指针, 否则NULL;`
`
相关推荐
冷白白23 分钟前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
活跃的煤矿打工人24 分钟前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
睡觉然后上课41 分钟前
c基础面试题
c语言·开发语言·c++·面试
武昌库里写JAVA1 小时前
【Java】Java面试题笔试
c语言·开发语言·数据结构·算法·二维数组
hgdlip1 小时前
如何快速切换电脑的ip地址
网络·tcp/ip·电脑
fasewer1 小时前
第五章 linux实战-挖矿 二
linux·运维·服务器
楚灵魈2 小时前
[Linux]从零开始的网站搭建教程
linux·运维·服务器
小小不董2 小时前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
这可就有点麻烦了2 小时前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
DY009J2 小时前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器