网络编程
文章平均质量分 87
网络编程的一些协议及操作
吐泡泡_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
TCP(滑动窗口/拥塞窗口补充)
方案,如果对端已经收到所有的报文或者刚连接什么也没发,也就是发送的报文全部都 ACK 了,则无论多大的包都直接发送,否则如果还有的报文没有 ACK,后续写的数据会积攒起来,如果积攒超过 MSS 则会打包发过去,或者前面发的所有包都 ACK 了也会直接发出去。对端通告窗口大小为 1,2,3.... 这种很小的窗口,发送端就只能发送很小的数据,但基于网络协议栈进行封包,TCP/IP最少报头都是 20 + 20,不携带选项,在携带这么少的数据,也就是 MSS,开销比较大。1. ACK丢包:发送 1,2,3。原创 2025-10-23 23:40:12 · 952 阅读 · 0 评论 -
Socket echo server
因为他们的第一个字段是一样的,所以可以用 sockaddr_in和sockaddr_un强转成sockaddr结构,并提取第一个字段判断是AF_INET还是AF_UNIX选择强转成sockaddr_in还是sockaddr_un结构,也就是C语言版的继承和多态。知名端口号比如:HTTP(80),HTTPS(443),DNS(53)。2. 当server启动的时候,就需要accpet获取连接,也就是有连接来了,获取到的连接分配一个文件描述符来进行读写,所以要起多线程/多进程,不然会阻塞后续的accpet。原创 2025-05-16 19:19:23 · 662 阅读 · 0 评论 -
NAT/代理服务器/内网穿透
当某个内网想访问公网,就必须先找到处于同一个网段的出入口路由器,而内网又不能暴露在公网上,所以当IP地址到达路由器时,路由器会把源IP转换成路由器的WAN口IP,并和源IP进行映射,这里他们互为 key <=> val,当服务器回显时,填充目的服务器IP地址,也就是之前经过转换后的IP地址,源地址填服务器的IP地址,在路由到目的IP所在的路由器,并由该路由器进行查映射表,查到转换之前的私有IP,在进行转发。路由器进行查表:202.244.174.37,查到得到:10.0.0.10,并交付给最初的主机。原创 2025-05-14 21:45:23 · 993 阅读 · 0 评论 -
-MAC桢-
当某台主机首次通信时,交换机会记录当前主机的mac地址,下次在进行通信,比如交换机首次记录A的mac地址,A再次通信,如果目的mac地址是B,则不需要往交换机右边的碰撞域发送数据包,同时C也能给E/F发送数据,进而减少了数据碰撞,如果A给右边的碰撞域发送数据,那就不会给B/D发送数据包,而是给右边的碰撞域所有的主机发送数据包。4. TCP三次握手的时候,双方会进行MSS的协商,在可变选项指定,因为双方的MTU可能不一样,最终双方使用的MSS取最小的那一个来进行后续数据包发送的大小避免数据包拆分。原创 2025-05-12 19:34:29 · 683 阅读 · 0 评论 -
ARP协议
5. 当路由器收到数据包,解包之后发现和自己mac地址一样,发现桢类型为0806,交给上层ARP,拿到ARP报头,先看op字段,因为不知道是别人构建的应答还是请求,这次是应答,首先看目的mac地址和目的IP地址和路由器的mac地址和IP地址一样,确定报文是发给路由器,然后得到源macE的地址,自此通过ARP请求根据目的IP地址得到目的主机的mac地址,后续重新封装mac桢填入目的主机mac地址发送数据包。前5个字段为固定字段,填充源ip,mac地址,目的ip地址,目的mac地址缺省广播。原创 2025-05-11 21:15:14 · 996 阅读 · 0 评论 -
IO多路复用
传统的read,write,都需要等对端写/缓冲区剩余空间足够才能写,相当于大部分时间都在等某个资源就绪,这样会不会太慢了?再比如appect获取连接,如果一直没人来连,就会一直阻塞等待。换句话说,一次性只能处理一个连接,有没有能同时等待多个事件?原理是一次性等待多个事件就绪,然后上层在进行统一处理,在同一时间段效率比传统的阻塞式等待效率要高,就好比如钓鱼,一次抛一个鱼竿和一次抛100个鱼竿,肯定是一次性抛100个鱼竿钓到鱼的概率要大些。原创 2025-03-25 12:40:05 · 1322 阅读 · 0 评论 -
HTTPS
当服务器把自己的公钥传输给客户端的时候,中间人拿到,并用自己伪造的M公钥交给客户但,客户端拿中间人的公钥加密自己的对称密钥,传给服务器,中间人再次拿到客户端加密的数据,拿自己的私钥解密得到客户端的对称密钥,在用客户端的公钥和服务器的公钥加密,传给服务器,服务器解密,得到客户端的对称密钥,但客户端的对称密钥和服务器的公钥已被窃取,后续通信采用对称密钥,中间人已经有了对称密钥,所以也有问题。如果对最开始的密钥进行加密,那么解密的密钥也要传给服务器进行解密,无限套娃,所以只采用对称加密不安全。原创 2025-03-20 19:28:34 · 4505 阅读 · 0 评论 -
Cookie/Session
假设有这么一个场景:比如登录一次bilibili,后续在访问就不需要登录了,又因为HTTP是无状态有,无连接的,无状态指客户端与服务器的请求是独立的,HTTP并不会保存客户端的任何信息,即使历史访问过。无连接指每次请求都会建立一次连接,结束关闭该连接,即:HTTP/1.0,比如后续采用HTTP/1.1持久连接:Keep-Alive等。1.HTTP Cookie(也称为Web Cookie、浏览器Cookie或简称Cookie。原创 2025-03-08 23:24:48 · 903 阅读 · 0 评论 -
TCP全连接队列
假设没有全连接队列/或者backlog为空,当上层很忙来不及appcet,则在忙的期间,可能有很多新的连接,但被服务器直接拒接了,当不忙的时候,之前的新连接就没了,忙的时候很忙,不忙的时候没有连接处理,也就是提高了服务器闲置率和减少给用户服务和体验的效率,但如果有全连接队列,不忙的时候就可以向里面获取连接。假设全连接队列长度很大,比如长度为1000,当全连接队列有连接,说明服务器已经很忙了,处于末端的连接注定要等待更久的时间来被拿走,也减少给用户的体验和效率,长度更大,空间也会有一定的浪费。原创 2025-01-22 01:15:08 · 618 阅读 · 0 评论 -
TCP协议
上述是数据都收到了的情况,如果前2次丢包了,直接重发,但最后一次,也就是最新的数据丢了,客户端是不知道了,但这时客户端把ACK出去之后,直接进行通信,如果服务器收到就没什么,如果没收到,说明3次握手没完成,客户端就发送数据,服务器收到了数据,但3次握手还没完成,服务器就不会应答ACK,而是应答RST标志位告诉客户端3次握手没完成,连接要重置。当接收端拿到数据不取走,应答的窗口只会越来越小,滑动窗口也就越来越小,也就是右指针不变,当接收端一次把缓冲区数据都取完了,窗口只会越来越大,也就是右指针变得很大。原创 2025-01-06 02:36:01 · 686 阅读 · 0 评论 -
初始 ‘IP’ 地址和 ‘端口号’
一.认识IP地址端口号网络字节序等网络编程中的基本概念一.认识IP地址端口号网络字节序等网络编程中的基本概念。原创 2024-10-26 21:08:30 · 1000 阅读 · 0 评论
分享