首页 > 编程语言 >15.网络编程

15.网络编程

时间:2023-02-23 14:12:28浏览次数:45  
标签:15 编程 网络 TCP 发送 数据 连接 服务端 客户端

1.常见网络词汇

  • 交换机:用于组件局域网

     

     

  • 路由器:实现局域网之间的通信

     

     

  • 三层交换机:集成了 交换机 & 路由器的功能

     

     

  • IP:用于在网络中确定主机的位置
    一个IP地址分为网络地址和主机地址,网络地址相同的IP属于同一个网段,同一个网段的IP才能相互通信,,而网络地址的确认是通过子网掩码的
  • 子网掩码:用于确认IP地址的网络地址
        IP:192.168.1.199          11000000.10101000.00000001.11000111
        子网掩码:255.255.255.0     11111111.11111111.11111111.00000000
    此时,网络地址就是前24位 + 主机地址是后8位
  • DHCP:在局域网内给电脑分配IP地址
  • 端口:用于确认电脑中不同应用程序的

    端口的取值范围:0 ~ 65535,很多端口在计算机的内部已被使用,我们平时自定义时尽量选择5000之后的端口。

  • 域名:就是某个IP地址的中文名字
    让域名和IP创建对应关系,用户只需要记住域名就可以了
    www.baidu.com   -->  110.242.68.3
    www.taobao.com  --> 121.18.239.232

    电脑寻找IP地址的过程

    第一步:在自己电脑的DNS缓存记录中寻找 域名对应的IP,如果未命中,则执行下一步。
    第二步:在自己电脑的hosts文件中寻找,如果未命中,则执行下一步
    第三步:在自己电脑上找到DNS配置的地址(本地域名服务器),去这个地址寻找域名对应的IP,如果未命中,则执行下一步。
    第四步:去根域名服务器中询问(全球共13台根域名服务器,距离中国最近的一台是在日本)

     

2.BS/CS架构

在平时开发中我们会经常听到BS、CS架构,这分别是什么呢?

  • CS架构:是Client和Server的简称,需要程序员开发客户端和服务端,如QQ,微信
  • BS架构:Browser和Server的简称,程序员只需要开发服务端,客户端由浏览器代替,如京东商城

而对于我们学习web开发,就是采用BS架构的,即网站开发

3.OSI七层模型

定义:模型是国际标准化组织(ISO)制定的一个用于计算机通信系统间互联的标准体系

模型一共分为以下七层:

  • 应用层: 网络服务和用户之间的一个接口,可以规定数据格式等
    协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
  • 表示层: 对用户数据进行编码,压缩,加密等操作
    格式有,JPEG、ASCll、EBCDIC、加密格式等
  • 会话层: 负责与目标建立,中断连接
  • 传输层: 建立端口到端口的通信,即确定双方的端口
    协议有:TCP UDP
  • 网络层: 确立目标的IP地址
    协议有:ICMP IGMP IP(IPV4 IPV6)
  • 数据链路层:对数据进行分组,设置目标mac地址等
  • 物理层:将二进制数据在物理媒介上传输

 

 

 

每一层都有自己的作用,7层互相合作,实现数据的交互,我们可以想象成寄快递

发快递方就是发数据的电脑,将物品通过快递一层层的包装,最后通过网络传输给了接收方,也就是接数据的电脑,然后将外包装一层层剥离开,最终拿到物品

4.UDP/TCP协议

4.1 TCP 和 UDP

协议就是一种规定,规定双方收发数据

UDP:(User Data Protocol),用户数据报协议,是一个无连接的面向数据报文的传输层协议,因为是无连接的,UDP的可靠性较差,它只负责将数据发送出去,不能保证数据到达对方。UDP没有超时重发,传输速度较快

TCP:(Transmission Control Protocol):是面向连接的协议,在数据发送前,双发会建立可靠的连接,TCP是可靠的,有重发机制

思考:两种协议该如何选择呢?

当我们传输数据的时候,追求速度,对少量数据的丢失是允许的,可以采用UDP通讯,如视频直播,语音通话

当我们对数据要求严格,必须保证数据的准确性,我们就可以采用TCP通信,如文件传输

4.2 TCP的三次握手

 

 

 

 

 

 思考:为什么需要三次握手而不是两次?

这是为了防止,因为已失效的请求报文,突然又传到服务器,引起错误

假设采用两次握手建立连接,客户端向服务端发送一个syn包请求建立连接,因为某些未知的原因,并没有到达服务器,在中间某个网络节点产生了滞留,为了建立连接,客户端会重发syn包,这次的数据包正常送达,服务端发送syn+ack之后就建立起了连接,但是第一包数据阻塞的网络突然恢复,第一包syn包又送达到服务端,这是服务端会认为客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ack包,自然不会认为连接建立成功,所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。

4.3 数据传输

一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题?针对这些问题,tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到

 

 

 

  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 序号:seq序号,32bits(4bytes)。用来标识从TCP源端口向目的端口发送的字节流,发起方发送数据时对此进行标记。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  • 确认号:ack序号,32bits。是期望收到对方的下一个报文段的数据的第一个字节的序号。只有ACK标志位为1时,确认序号字段才有效,ack=seq+1

4.4 TCP的四次挥手

 

 

处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭,假设客户端主动发起连接关闭请求,他给服务端发起一包FIN包,标识要关闭连接,自己进入终止等待1装填,服务端收到FIN包,发送一包ACK包,标识自己进入了关闭等待状态,客户端进入终止等待2状态。这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,发送一包FIN包,最后进入确认状态,这是第3次挥手,客户端收到之后恢复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。为什么客户端要等待超时时间这是为了保证对方已经收到ACK包,因为假设客户端发送完最后一包ACK包后释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在 最后确认状态,如果等待一段时间,这时服务端会因为没有收到ack包重发FIN包,客户端会响应 这个FIN包进行重发ack包,并刷新超时时间,这个机制跟第三次握手一样。也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。

5.python实现网络编程

6.粘包

7.阻塞和非阻塞

8.IO多路复用

标签:15,编程,网络,TCP,发送,数据,连接,服务端,客户端
From: https://www.cnblogs.com/victor1234/p/16872572.html

相关文章

  • 3配置Linux系统的网络
    3配置Linux系统的网络配置Linux网络前,需要对虚拟机中的当前CentOS系统所对应的虚拟机是那个网络模式:VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式)?(1)查看当前系统的虚......
  • 四Linux系统的网络
    4.1Linux的网络参数在Linux系统中网络配置参数存储在相关的配置文件中主要有以下参数:IP地址、子网掩码、网关、DNS等参数,确定和配置好4个参数Linux系统的网络就可以使用了......
  • 2VMware虚拟机的网络环境
    2VMware虚拟机的网络环境由于是在虚拟机中安装的CentOS7系统,因此,设置网络时是需要通过VMware虚拟机的网络环境进行配置的。VMware为我们提供了三种网络工作模式,它们分别......
  • ens33没有ip地址,linux重启虚拟机网络服务出现异常
    开启虚拟机后使用ipaddr命令发现ens33没有ip地址开启网络服务后报错 解决方法:1.关闭NetworkManager服务2.systemctlstopNetworkManager3.systemctlrestartnet......
  • java 网络编程Socket编程
        Server.javaimportjava.io.*;importjava.net.*;publicclassServer{publicstaticvoidmain(Stringargs[]){String[]answer={......
  • [代码审计基础 15]phpmcs_v9.6 rce
    PHP:5.4.5设置调试:https://blog.csdn.net/m0_46641521/article/details/120107786版本:phpcms_v9.6.0_UTF80x01:路由分析和前一篇一样的路由,但是对输入的关键字都有了防护......
  • m基于BP神经网络的房屋价值变换趋势预测matlab仿真
    1.算法描述      住宅价格是住宅市场的核心,住宅市场的变化关系到广大消费者的切身利益,商品房价格是升是降,销售是冷是旺,是社会关注的热点问题。因此,从不同角度来看,对......
  • 汽车灯IC 宽电压5-150V 8A 降压恒流驱动IC
    AP2400是一款PWM工作模式,高效率、外围简单、外驱功率管,适用于5-100V输入的高精度降压LED恒流驱动芯片。外驱MOS,输出电流可达6A。AP2400可实现三段功能切换,通......
  • java socket网络编程(多线程技术)
    Client.javaimportjava.io.*;importjava.net.*;importjava.util.*;publicclassClient{publicstaticvoidmain(Stringargs[]){Scannerscann......
  • 为AKS群集配置网络策略
    网络策略是一种Kubernetes规范,其中针对Pod之间的通讯定义了访问策略。使用网络策略可以定义有关发送和接收流量的规则集,并将其应用到与一个或多个标签选择器相匹配的Pod集合......