刚刚更新完Linux系统编程,特别推荐大家去看的Linux系统编程,总共44个小时,老师讲的非常好,我是十天肝完的,每天大概看20集,每天还要以写blog的形式来写笔记来总结一下,虽然这十天有点累,但是这套视频值得这些时间的付出。我现在在学习Linux网络编程,学习看的视频还是Linux系统编程同一个老师讲的,从今天开始更新Linux网络编程的笔记,先立一个flag:争取十天更新完(虽然我觉得这不太可能,但起码要在今年过年前更新完)
这个OSI七层模型只用了解即可,我们后面写代码不用这个七层模型,用的是TCP/IP四层协议体系结构。
可以简记为“物数网传会应表”
可以简记为“网网传应”
介质访问控制(Media Access Control,MAC)地址也称硬件地址,长度是48位(6字节),由十六进制的数字组成,分为前24位和后24位。前24位称为组织唯一标志符(OUI),是由IEEE的注册管理机构分配给厂家的代码,用来区分不同的厂家;后24位由厂家自己分配的代码,成为拓展标识符。
在Linux系统下可以用ifconfig
命令来查看MAC地址
IP地址是IP提供的一种统一的地址格式,它为互联网上的每一个网络和每一个主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址分为IPv4和IPv6两类,由于现在主要使用IPv4地址,故下面只介绍IPv4地址
IPv4地址是一个32位的二进制数,通常分隔为四个八位二进制数(即四字节)。IPv4地址通常用点分十进制表示成a.b.c.d
,其中a,b,c,d都是0-255内的十进制整数
子网掩码又称为网络掩码,地址掩码。计算机处理需要IP地址外,还需要知道多少位表示主机号及多少位表示子网号。这要求子网掩码不能单独存在,要结合IP地址一起使用,将某个IP地址划分为网络地址和主机地址两部分,子网掩码只针对IPv4地址。
在Linux系统下可以用ifconfig
命令来查看子网掩码
端口包括物理端口和逻辑端口。物理端口是用于连接物理设备的接口,逻辑端口是逻辑上用于区分服务端口。我们这里只讲逻辑端口。
Linux操作系统会给那些有需求的进程分配IP地址和端口,每一个端口由一个正整数标识。在互联网上,各个主机根据TCP/IP发送和接收数据包,数据包根据其目的主机IP地址选择路由器被传送到目的主机,当目的主机接收到数据包后,根据数据包中的目的端口号把数据发送到目的端口进行处理。
端口主要分为以下几类:
建立TCP连接的过程又称为三次握手。建立一个TCP连接时,需要发送端和接收端共发送三个数据报文以确立连接建立。
SYN
置为1,发送端进入SYN_SENT
状态,随机产生一个值seq=J
将该数据发送给接收端,等待接收端确认。SYN_RCVD
状态,收到数据后由标志位SYN=1
确认发送端请求建立连接,接收端将SYN
和ACK
都置为1,ack=J+1
,并随机产生一个值seq=K
,并将该数据发送给发送端以确认收到请求连接。ACK
置为1,ack=K+1,并将数据发送给接收端,接收端检查ack是否是K+1,ACK是否为1,如果正确则连接建立成功,接收端和发送端进入ESTABLISHED
状态,完成三次握手,随后开始传输数据。FIN
包,用来关闭到接收端的数据传送,发送端进入FIN_WAIT_1
状态。FIN
包,发送ACK
给发送端,接收端进入到CLOSE_WAIT
状态。FIN
包,用来关闭到发送端的数据传送,接收端进入LAST_ACK
状态。FIN
包后,进入TIME_WAIT
状态,并发送一个ACK
确认包给接收端,经过2MSL后,进入CLOSE
状态,完成四次挥手。连接完全断开。这一篇全是理论,看起来应该有些枯燥,如果实在看不下去,可以先跳过,先看后套接字部分,等看了套接字之后再来看这可能会就会好一些。
个人亲身经验:我们学习的一系列Linux命令,一定要自己亲手去敲。不要只是看别人敲代码,不要只是停留在眼睛看,脑袋以为自己懂了,等你实际上手去敲会发现许许多多的这样那样的问题。毕竟“实践出真知”。
如果你觉得我写的题解还不错的,请各位王子公主移步到我的其他题解看看
- 数据结构与算法部分(还在更新中):
- C++ STL总结 - 基于算法竞赛(强力推荐)
- 动态规划——01背包问题
- 动态规划——完全背包问题
- 动态规划——多重背包问题
- 动态规划——分组背包问题
- 动态规划——最长上升子序列(LIS)
- 二叉树的中序遍历(三种方法)
- 最长回文子串
- 最短路算法——Dijkstra(C++实现)
- 最短路算法———Bellman_Ford算法(C++实现)
- 最短路算法———SPFA算法(C++实现)
- 最小生成树算法———prim算法(C++实现)
- 最小生成树算法———Kruskal算法(C++实现)
- 染色法判断二分图(C++实现)
- Linux部分(还在更新中):
- Linux学习之初识Linux
- Linux学习之命令行基础操作
- Linux学习之基础命令(适合小白)
- Linux学习之权限管理和用户管理
- Linux学习之制作静态库和动态库
- Linux学习之makefile
- Linux学习之系统编程1(关于读写系统函数)
- Linux学习之系统编程2(关于进程及其相关的函数)
- Linux学习之系统编程3(进程及wait函数)
- Linux学习之系统编程4(进程间通信)
- Linux学习之系统编程5(信号)
- Linux学习之系统编程6(线程)
- Linux学习之系统编程7(线程同步/互斥锁/信号量/条件变量)
“种一颗树最好的是十年前,其次就是现在”
所以,
“让我们一起努力吧,去奔赴更高更远的山海”
如果有错误❌,欢迎指正哟
如果觉得收获满满,可以动动小手,点点赞,支持一下哟