网络编程记录

本文深入探讨了计算机网络的关键概念和技术,包括并发与迭代服务器的工作原理、OSI模型与TCP/IP模型的区别、TCP的可靠传输机制、UDP与TCP的原理对比、TCP连接的关闭过程、TIME_WAIT状态的作用、socket对的本质及作用、ARP协议的工作机制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主题:

学习计算机网络相关,应该会更新的。

---------------并发服务器和迭代服务器-------------------
并发服务器指的是对于多个客户的请求,可以采用并发的方式来处理
迭代服务器指的是对于多个客户的请求,会进行排队,然后逐个处理。一个完全处理完之后,去处理
下一个,这种方式会使得客户的体验非常差。
并发服务器的实现可以采用多种方式来实现。

----------------------osi模型和网际协议族-----------------
在网际协议族中,设备驱动程序 完成了物理层和数据链路层的功能。网络层和传输层是都有的
应用层 代替了 会话层,表示层,应用层。
传输层以上 是用户进程的工作。网络层及以下是 内核的工作。因此用户程序是多样的,而传输层以下是相对单一的。在写用户程序的时候,也不需要考虑太多传输层以下的事情。

------------------------tcp的可靠传输--------------------
tcp的可靠传输依靠的是 停止等待协议(停止等待协议规定了,当接受方B没有接受到信息,也就是传输的前向链路出现问题的时候,B什么也不做,A会有一个“超时重传机制”),正是因为规定了“重传是超时自动进行的,不需要B的任何配合”,因此,也叫做ARQ,表示自动重传请求。
停止等待协议 过于低效,因为信道利用率太低。每一个发送的单位发送完之后,就不再发送,而是等待确认。这样的话,大部分时间都浪费在RTT上了。
为了弥补停止等待协议的不足,思路是 一次多发送几个单位,然后确认的时候确认 收到的连续的单位中的最后一个(累计确认)。根据这种思想,有 “滑动窗口协议”。发送方根据接受方的确认报文的ack和 窗口大小字段的值(反映了接受方的接收能力)来构建 发送窗口。有三个指针来控制这个发送窗口。但这种机制面临一个问题:对于没有按照顺序到达的单位数据,怎样处理是一个问题。
加入中间缺乏某个数据单元的时候,是抛弃掉后面已经收到的,继续重传,还是先存储起来,这是一个问题。
拥塞控制机制:设置拥塞窗口,动态改变这个窗口的值,这个窗口大小根据网络的状态变化而变化慢开始,拥塞避免,快速重传。慢开始也就是拥塞窗口的值一开始很小,为1.然后规定每收到一个确认就会加1,而且对于每一个单位,都返回一个确认(实际上是min(N, SMSS),N表示确认收到的增加的单位)。拥塞避免就是当慢开始的拥塞窗口到达ssthread的时候,就不再指数增加了,而是每次只增加1.线性上升。当出现拥塞(超时重传)的时候,重新启动“慢启动的过程”,但是ssthread变为原来的一半。
快速重传指的是 当接受方有个别的 数据单位没有接收到的时候,快速发送三次确认报文,指向同一个缺失的 数据单元。然后发送方知道了,这不是网络拥堵造成的丢失,而是意外情况。不会启动慢启动。

----------------------udp和tcp原理---------------------------
udp是一个简单的,不可靠的传输协议。tcp是复杂的,可靠的传输协议。
udp是每一个数据报都有一个长度的,tcp是面向字节流的,没有一个明显的边界。没有一个独立的
完整的单位,而是一个又一个的平等的字节。
udp不是面向连接的,具体表现在同一个套接字可以同时用于向多个服务器发送数据,或者同时接受
多个客户端的信息。不是一对一的,因此不是面向连接的。tcp则是一对一的。
udp和tcp都可以是全双工的。
这个为src和ack的变化规律,以及一些标志位的作用
在tcp中目的端口号,源端口号,“seq”, “ack”是比较重要的这些字段表示具体的值。有确定的
含义。ACK,SYN,FIN,PSH这些为标志位。有各自的用处。
seq和ack的关系见图解
如果是只有一方向另外一方发送数据,比如B只向A发送,那么A的seq对应的B的ack是相等的。因为
A携带的内容(字节数len)为0.这样的话,A的seq是不变的。B的ack是不变的。
但是A的ack和B的seq是变化的。

tcp关闭的时候先调用close的启动“主动关闭程序”,是主动关闭的一方。他的行为特征是先发送
一个FIN分组。表示我发送完了。发送进程没有任务了。接受进程仍然不可以推出。
接受到这个FIN分组的一方启动“被动关闭程序”,是被动关闭的一方。
行为特征是先返回一个ack确认报文。对于接受进程来说,这是一个文件结束符。接受进程可以关闭了
发送进程仍然可以活动。当发送进程也结束的时候,发送一个FIN,关闭发送进程,此时全部关闭
接受到FIN的一方,返回确认,然后关闭接受进程,也全部关闭。

确认和应答是不一样的,确认就是表示我收到了你的消息。应答是里面包含了请求的数据。
确认和应答如果是一起的,在一个包里面,叫做“捎带”。有时候,这两个是紧挨这的两个包

-------------------TIME_WAIT状态--------------------
TIME_WAIT是TCP连接的主动释放端的最后一个状态。等待时间为最长分节生命期(MSL)的2倍
MSL是一个比较大的时间,比如1min到4min之类的。这个是一个绝对的时间。
在数据报中还有一个跳限(hop limit)是一个8位的数字,表示最多有几跳。

TIME_WAIT的状态存在的理由是,比如可以可靠地实现TCP全双工连接分组。

-------------------端口和socket对----------------------------
端口为一个16位的数字。采取的策略是,特定的服务对应特定的端口。由一个叫做IANA的组织来管理
0-1023是严格管理的。在UNIX中,这些端口的使用必须要使用root权限。
1024-49151 不严格要求
49152-65535 称之为 动态端口。不做严格要求,也不做记录

-------------通配符和正则表达式------------------------
通配符一般只是用于文件名的匹配。在很多命令中都可以使用。比如find等。正则表达式则是用于文件
内容的模式匹配。正则表达式的描述条件可以划分为
1 单个字符描述(如\w:字母或数字或下划线的
一个字符 \s 一个空白字符 \S:非空白字符 [字符集]:其中一个 [^字符集]:非其中一个
\t:制表符 \n:换行符 \r:回车符 .:任意一个字符),
2 位置描述:$:行尾 ^:行首 \b:单词边界,后面就是空格,就是单词最后一个字符 \B:非单词边界
3 次数描述:{}:前一个字符出现多少次 +:前一个字符1次或多次 *:前一个字符0次或多次
?:前一个字符0次或1次

通配符:一般只是用来进行字符的匹配。一个标志特征是一个通配符可以“单独”表示多个不同的字符
比如*表示0个或多个字符。?表示任意一个字母。

----------------socket对以及作用和本质-----------------------------
socket对,也就是{主机ip,主机端口,对方ip,对方端口}在通信的时候,才是一个基本的必须的
单位。一个socket对唯一确定了一个连接。服务器会根据每一个socket对来建立一个线程。
当一个segment来的时候,需要检查其socket对的每一个字段,才可以选择交给哪一个进程进行处理

socket就像是一个 类 。有数据结构,也就是缓冲区。这个缓冲区和应用进程的缓冲区是分开的。
缓冲区大小通过SO_SNDBUF来进行设置。socket同时还和特定的连接绑定起来。

write是一个系统调用,使用write时,需要将应用进程的缓冲区的数据,复制到socket的
缓冲区里面。如果没有办法全部复制的话(由于应用进程的缓冲区大小不够),write会阻塞。
当发送可以发送的数据,并且收到了ack,则缓冲区的已经发送过的内容可以丢弃。这时,唤醒
write进程,再进行发送。当全部可以写入到socket缓冲区的时候,就进行返回。不保证对端收到

----------------------------arp协议---------------------------
协议结构

ip层有ip地址就可以完成封装。但是当想要加上数据链路层的头的时候,需要加上本机的mac地址
和对方的mac地址。因此,需要一个表格,里面存在ip到mac地址的映射。用于mac帧的封装。
arp协议就是这样的作用。其还可以完成动态更新。因为物理关系可能会发生改变。比如原本的计算机
被拿走了,或者添加了新的计算机。
当想要查看mac表的时候,可以拿着ip去查,如果有的话,直接用。没有的话,就用arp协议来
进行查找,完善表项。

arp的mac地址查找用到了广播和单播的概念。在局域网中,广播表示mac地址(48b)全部为1
每一个局域网中的设备都接收。单播表示mac地址为一个特定的设备的地址,所有的设备都可以听得到
但是只有mac地址对的上的进行接收。多以,这其实是不是很安全的。
arp的报文没有用到ip协议,用到了mac帧格式。
arp询问的时候,是广播的。当目标响应的时候,是单播的。
此外,ip,mac表的表项是有生命周期的。为了及时更新。

arp的具体字段见图片。里面的op字段用来表示arp请求还是响应。请求的话,是1.响应的话是2
arp具有这样的特性。当A主机想要广播询问B主机的mac地址的时候,其他主机如果听到,
也会进行更新自己的arp缓存,记录或更新A主机的ip和mac的对应关系。
同时,mac对上的主机B在响应的同时,也会对A的ip和mac进行记录或更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值