计算机网络(网络编程)
文章平均质量分 61
程序员懒羊羊
记录c/c++学习过程
编译器:Visual Studio2019
展开
-
【计算机网络】 基于TCP的简单通讯(客户端)
连接服务端我们使用的是connect()函数,分别为连接使用的socket,连接的地址信息,连接的地址信息长度。返回值为int类型,如果没有错误返回0,否则返回SOCKET_ERROR。这样我们的TCP协议简单通讯就写好了。没有什么问题,可以一人说一句话。先运行服务端再运行客户端。原创 2023-09-28 23:30:18 · 1040 阅读 · 0 评论 -
【计算机网络】 基于TCP的简单通讯(服务端)
接收数据我们使用recv()函数,这个函数相比recvfrom()少了两个参数,它不需要记录对端的地址信息了,因为已经跟对端连接成功了,已经知道对端的地址信息了,连接成功返回的socket就像是连接在两端的一条绳。监听我们用listen()函数进行,他有两个参数,第一个为socket,意为派哪个socket去进行监听,第二个参数为int值,它是能够等待被连接的队列的最大长度,返回值如果是0就没有问题,为SOCKET_ERROR就报错。发送数据我们使用send()函数,原理和recv()函数相同。原创 2023-09-27 23:51:52 · 564 阅读 · 0 评论 -
【计算机网络】 基于UDP的简单通讯(客户端)
不需要绑定ip地址是因为绑定ip地址是在操作系统那里注册,那么为什么客户端不需要绑定而服务端就要绑定呢,原因是有发送数据的顺序决定的,一般都是客户端先发,主动发消息的时候操作系统就会自动给分配一个端口号,然后操作系统也会帮助选择一个网卡。客户端跟服务端差不多,也要先加载库,在加载库之后也要创建套接字,但是客户端一定是没有绑定ip地址的,之后是循环发送数据和接收数据,最后关闭套接字、卸载库。因为我们已知对端的ip,所以在接收数据的时候不需要使用输出参数,填NULL即可。运行一下,先开启服务端再开启客户端。原创 2023-09-26 23:31:54 · 463 阅读 · 0 评论 -
【计算机网络】基于UDP的简单通讯(服务端)
第一个变量是ip地址类型,我们用的ipv4类型,第二个是端口号,第三个是ip地址。函数的参数有六个,第一个为socket,意为使用哪个socket进行接收,第二个参数为char*,是一个输出参数,是用来接收数据的缓冲区,第三个参数为这个缓冲区的大小,第四个参数是一个标志位,用来决定当前的接收方式,我们在这里不做特殊设置,用默认的即可,下一个参数也是一个sockaddr *输出类型的参数,用来存放数据是从哪里来的,最后一个参数当然就是上一个参数的长度,但由于它属于是输出类型的参数,所以要变为指针类型。原创 2023-09-25 23:52:07 · 500 阅读 · 0 评论 -
【计算机网络】 TCP和UDP的区别
怎么能让在我们使用UDP的情况下还能让其传输可靠呢?答:可以在应用层手动写一个seq和ack的机制。原创 2023-09-24 23:58:22 · 493 阅读 · 0 评论 -
【计算机网络】 TCP协议总结
答:TCP是一对一传输的,理论上是不能发广播的。原创 2023-09-21 20:47:08 · 387 阅读 · 0 评论 -
【计算机网络】 拥塞控制
网络中的链路容量和交换节点中的缓存和处理机都有着工作的极限,当网络的需求超过他们的工作极限时,就出现了拥塞。在网络中出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这是TCP就会重传数据,但是 一重传就会导致网络的负担更重,于是会 导致更大的时延以及更多的丢包,这个情况就会进入恶性循环被不断地放大…当收到三个重复的ACK时,触发快重传机制,那么cwnd会变为原来的一半,然后ssthresh等于当前的cwnd,然后使用快恢复的算法,cwnd=ssthresh+3,然后继续使用拥塞避免算法。原创 2023-09-20 20:23:57 · 670 阅读 · 0 评论 -
【计算机网络】 Nagle算法
Nagle算法默认是打开的,如果对于一些需要小数据包交互的场景的程序,比如telnet或ssh这样的交互性比较强的程序,则需要关闭Nagle算法。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。(因为在传输时不会因为数据包小而传输的快,是根据包的个数转发的)原创 2023-09-19 21:03:23 · 1048 阅读 · 0 评论 -
【计算机网络】 心跳机制
就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。原创 2023-09-18 18:04:23 · 842 阅读 · 0 评论 -
【计算机网络】 粘包问题
tcp是数据流传输,是一种没有边界的,可以合并的传输数据方式。合并就要能拆开,拆不开就是粘包。适用场景:适合用户可输入的内容比较有限比较固定的情况。缺点:数据可能和标志位重合,导致错误拆包。适用场景:适合每次发的大小基本是固定的。缺点:每次会多发一个包,浪费空间。设置标志位(起始/结束标志位)先发数据长度,然后再发数据包。缺点:容易浪费空间和资源。适用场景:适合网页浏览。缺点:浪费时间和资源。原创 2023-09-15 20:50:04 · 596 阅读 · 0 评论 -
【计算机网络】 TCP流量控制——滑动窗口和累积应答
我们前面所说的是我们每发送一个包对端就要回一个ack,那么这样效率太慢了,我们这里就有一个累积应答的机制,就是说我们客户端累积发送多个包,然后服务端再统一进行回复。那么我们累积应答时具体发送多少数据之后统一回复一个ack是由什么决定的呢,就是由我们之前所说的窗口的大小来决定的。主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。当发送数据过程中有一个或多个包丢失,从序号小的位置回复一个ack,让发送端重新发送。原创 2023-09-13 23:34:00 · 677 阅读 · 0 评论 -
【计算机网络】 RTT和RTO
路由器排队是因为他不止给一个人处理数据,他会给所有经过它的数据进行处理,当这个路由器收到的数据比较多,它每秒能够处理的数据量是有限的,那么多出来的数据就要等到下一秒才能够处理,然后等待处理的数据的队列可能越排越长,在排队的过程中就有可能出现超时了,所以往返时延是一个重要的指标。RTT(Round-Trip Time)是计算机网络中的一个重要的性能指标,表示从发送端发送数据开始,到发送端接收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。也就是从发送数据到接收到ack的时延。原创 2023-09-12 20:51:35 · 2770 阅读 · 0 评论 -
【计算机网络】 TCP——四次挥手
答:因为最后等待2MSL是为了防止最后一次ACK丢失,如果ACK丢失了,在2MSL中会再次收到FIN,那就再回一个ACK,如果没有再次收到FIN,就证明ACK没有丢失,就可以放心进入CLOSE状态了,如果不等待就关闭并且ACK包丢失了,那么被动方就会一直重复发FIN包。答:要将之前收到的数据都处理完再回复FIN包,立刻回ACK是为了防止超时重传,因为如果处理数据的时间过长就会触发超时重传机制。原创 2023-09-11 22:55:02 · 1089 阅读 · 0 评论 -
【计算机网络】TCP传输控制协议——三次握手
答:因为当接收到的包中不止有ack,那么需要回复一个ack,否则会产生超时重传,服务端需要接收到发送ACK的ACK才能建立连接。答:因为服务端在发送ACK包的同时也可以发送SYN包,原因是这两个标志位在逻辑上不产生冲突。原创 2023-09-10 14:46:32 · 892 阅读 · 0 评论 -
【计算机网络】 确认应答机制与超时重传
那如果是服务端回复的ack丢失,道理也基本相同,也是在规定时间内没有收到服务端回复的ack包,那么就再次发送一遍数据,不同的是因为服务端已经接收到过这个数据了,所以不会再次处理这个数据,就把重复的包丢弃,然后重新回复一遍ack。在我们客户端发送数据的同时会有一个定时器,如果在规定时间没有收到服务端回复的ack,那么就证明我们的包丢失,那就再给服务端重新发送以下丢失的包。200,服务端收到后再回一个ack=201,在书写过程中,我们一定要先把标志位置1,然后再发送数据包,否则包是失效的。原创 2023-09-09 14:42:11 · 1113 阅读 · 0 评论 -
【计算机网络】 TCP协议头相关知识点
首先是源端口和目的端口,这两个是UDP中也有的,但是UDP中只有这两个,没有后面的校验数据,接着是序号(seq)和确认号(ack),他们两个是配合使用的,比如说发送端发送了一个序号为1的seq,然后接收端回一确认号为2的ack,就证明说收到了seq为1的这个包,可以继续发送seq等于2的包,这样可以保证数据可靠,序号还能保证顺序不乱。最后可变部分的原理和IP部分也基本一样。在开发过程中,我们要坚持一个不信任原则,不管是在哪一层,干什么都要对数据进行校验,因为在任何时候我们的数据都有可能被他人访爆。原创 2023-09-08 20:49:52 · 899 阅读 · 0 评论 -
【计算机网络】 IP协议格式以及以太网帧结构
生存时间是一个倒计时,当计时为0时,这个包的生存时间就到了,当某一个路由器在转发时发现你的生存时间为0时就会将这个包丢弃,原因是有的包会在传输过程中迷路,那么这种数据包不能让它在网络中一直存在,这就造成了丢包,他会占用我们的带宽,生存时间不是单纯的时间,而是能经过路由器的个数。可变部分就是为了我们想要在ip层网络层加一些东西,因为收到数据时是先到达网络层,然后到达传输层应用层的,所以网络层一定会先处理数据,比如用华为的手机连接华为的路由器,是不需要密码的,那么就是在网络层处理的。原创 2023-09-07 19:11:34 · 859 阅读 · 0 评论 -
【计算机网络】 子网划分
我们知道C类ip默认子网掩码位255.255.255.0,C类ip的网络号应该是24位,故其借用了主机位4位来充当网络位,所以创建的子网个数就是2 ^ 4 = 16。从0开始不断增加,直到到达子网掩码值,中间的结果就是子网,即0,64,128,192。网关都是具有路由功能的ip地址,就是说网关必须要有路由功能,默认的主机号都是0,这样的才是网关。具有正常的网络号部分,而主机号部分全为1的ip地址称之为广播地址。非默认的子网掩码中1的个数一定比默认子网的多,并且1要连续,这些1是从原来的主机号中借来的。原创 2023-09-06 10:04:56 · 1484 阅读 · 0 评论 -
【计算机网络】 ARP协议和DNS协议
ARP协议实现的过程就是自己设备会发送一个ARP Request的广播,那么当前路由器所连接的所有设备都会收到这个广播,数据包中的目的MAC填0,所有收到这个广播的设别都会看自己的IP是不是这个广播的目IP,如果不是就会将这个包丢弃,如果是就会回一个ARP Reply的单播,然后就可以开始通信了。当发送端广播ARP请求时,本地网络上不会有主机回应(因为IP地址是外网的),此时路由器将会回应该请求,则发送源认为路由器就是目的主机,会将报文全部转发给它,再由路由器转发报文到外网,则该路由器就被称为ARP代理。原创 2023-09-05 19:10:19 · 1193 阅读 · 0 评论 -
【计算机网络】 七层网络模型
是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。比如我们如果在登录一个网站之后,浏览页面过程中要跳转网页,那么不需要重复登录,靠的就是session会话管理,他就是保证在同一个网站中不管多少次的页面跳转,都不需要重新登录。传输层通信协议,有流量控制和差错控制,使用TCP协议的应用比如邮件的接收和发送、文件传输、远端登录。想要使数据发送的快,就要对数据进行压缩,也会使网络更通畅。原创 2023-09-05 14:22:06 · 277 阅读 · 0 评论 -
【计算机网络】 静态库与动态库
把头文件拷贝到当前项目中,添加头文件依赖把库文件拷贝到当前项目中,添加库文件依赖把头文件拷贝到当前项目中,添加头文件依赖把索引文件拷贝到当前项目中,添加索引文件依赖把dll拷贝到exe同文件下。原创 2023-09-04 19:32:29 · 1280 阅读 · 0 评论