学习笔记——网络编程(一)

本文介绍了网络通信的基础知识,包括IP地址的分类(A类、B类、C类),端口的作用以及知名与动态端口的区别,MAC地址的唯一性,TCP协议的可靠传输特性如超时重发和三次握手、四次挥手过程,以及UDP协议的无连接和不可靠性特点。这些概念是理解网络通信和互联网工作原理的关键。
摘要由CSDN通过智能技术生成

IP地址和IP协议

  • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由322进制表示
  • 范围0.0.0.0-255.255.255.255
  • 一个ip地址通常写成四段十进制数,例:192.168.1.10
  1.   a类网   10.0.0.0~10.255.255.255
  2.   b类网   172.16.0.0~172.31.255.255
  3.   c类网   192.168.0.0~192.168.255.255

端口

  • 只有一个IP地址是不行的,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。IP找到对应主机,端口找到主机中某一个服务。
  • 端口号不是随意使用的,而是按照一定的规定进行分配。
  • 端口的分类标准有好几种,最主要的是知名端口动态端口
  • 知名端口的范围从01023(1024个端口都是操作系统会使用的比较大的端口)。例如:80端口分配给HTTP服务、21端口分配给FTP服务。
  • 一般情况下,如果一个程序需要使用知名端口的需要有root权限

动态端口(Dynamic Ports)

  • 动态端口的范围是从102465535
  • 它一般不固定分配某种服务,而是动态分配。
  • 动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。当这个程序关闭时,同时也就释放了所占用的端口号。

MAC地址

  • 每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制。
  • 通常由12 位16进制数表示(前六位是厂商编号,后六位是流水线号)

TCP协议

  1. TCP——传输控制协议,是因特网中的传输层协议,提供的是面向连接、较高可靠的字节流服务
  2. TCP将在服务器和客户端之间建立一个全双工 (full-duplex) 的通信。
  3. TCP提供 超时重发 丢弃重复数据检验数据流量控制等功能,保证数据能从一端传到另一端。
  4. TCP建立一个连接需要三次握手,终止一个连接要经过四次挥手,这是由TCP的半关闭(half-close)造成的。
  5. 应用:Web浏览器;电子邮件、文件传输程序。
在串行通信中,数据通常是在两个终端(如电脑和外设)之间进行传送,根据数据流的传输方向可分为3种基本传送方式:单工、半双工和全双工。
1.  单工:只有一根数据线,通信是单方向上进行。例如:监视器、打印机、电视机等。
2.  半双工:只有一根数据线,此数据线既可发送也可接收,可以在两个方向进行,但通信双方不能同时收发数据。
     注:在这儿,每当一方完成命令后都要切换状态,并告知对方可以进行操作,否则就会出错。
3.  全双工:两根不同的数据线,通信双方可以在同一时刻进行发送和接收。例如:打电话。 

前置~~~

  • 序号(sequence number):seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  • 确认号(acknowledgement number):ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
  • 标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:

    URG:紧急指针(urgent pointer)有效。

    ACK:确认序号有效。(为了与确认号ack区分开,我们用大写表示)

    PSH:接收方应该尽快将这个报文交给应用层。

    RST:重置连接。

    SYN:发起一个新连接。

    FIN:释放一个连接。

三次握手

各字段的作用:

SYNACKseqack
建立连接确认收到了请求发送自己的数据发送接收到的对方的数据

首先聊天式的理解下:

第一次握手:   客户端->服务器    “请求连接 + 我能发送”  

SYN = 1  ,seq = x

你能和我连接吗?可以接收到我的数据吗?

第二次握手:  服务器->客户端    “回复连接 + 我能收到 + 我能发送 + 询问核实”  

SYN = 1 ,ACK = 1 ,seq = y ,ack = x + 1

我可以建立连接,我接收到了你的请求,你能接收我的数据吗?这是你的数据吗?

第三次握手:  客户端->服务器    “我能收到 + 回复询问 + 再次询问核实”  

ACK = 1 ,seq = x + 1 ,ack = y + 1

我收到了你的回复,这是我的数据,这是你的数据吗?

下面则是官方性的描述:

  • 最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器
  • 服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态。
  • 第一次握手:客户端先创建传输控制块TCB,然后向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,客户端进程进入了 SYN-SENT 同步已发送状态。
  • 第二次握手:服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,服务器进程进入了 SYN-RCVD 同步收到状态。
  • 第三次握手:客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态触发三次握手。

四次挥手

第一次挥手:   客户端->服务器    “请求断开 + 我要断开”  

FIN = 1  ,seq = u

我能和你断开吗?我想要断开。

第二次挥手:  服务器->客户端    “我能收到 + 我要断开 + 同意断开”  

ACK = 1 ,seq = v ,ack = u + 1

我接收到了你的消息,我也想要断开,没问题你走吧。

第三次挥手:  服务器->客户端    “请求断开 + 我能收到 + 我要断开 + 再次同意断开”  

FIN = 1 ,ACK = 1 ,seq = w ,ack = u + 1

我可以和你断开,我收到了你的消息,那就不见了,你走吧。

第四次挥手:  客户端->服务器    “我能收到 + 我彻底断开 + 再次同意断开”  

ACK = 1 ,seq = u + 1 ,ack = w + 1

我收到了你的消息,我断开了,那就不见了。

  • ​​​​​数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
  • 第一次挥手:客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态
  • 第二次挥手:服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态
  • 第三次挥手:客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。

  • 为什么客户端要等待2MSL?

为保证客户端发送的第一个ACK报文能到达服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。


UDP协议

  1. UDP——用户数据报协议,是一个简单的面向数据报(报文)的传输层协议。
  2. UDP提供的是不可靠的无连接的服务。只把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
  3. UDP不用在在传输数据报前给客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输效率高(发送前时延小)
  4. 特点:一对一、一对多、多对一、多对多、尽最大努力服务, 无拥塞控制
  5. 应用:域名系统 (DNS);视频流;IP语音(VoIP)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值