5-5 网络编程

1,软件的开发架构

CS架构:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。

BS架构:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。

2,网络基础

交换机,同一个局域网内的机器之间的交流就需要交换机。

路由器,跨局域网机器之间的交流,不同的交换机连接到路由器。

网关IP:跨局域网的机器之间不能直接通信,只能通过网关ip通信。

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

子网掩码就是表示子网络特征的一个参数。

ip协议,表示一台电脑在网络中的位置。

  • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
  • 范围0.0.0.0-255.255.255.255
  • 一个ip地址通常写成四段十进制数,例:172.16.10.1

端口,在同一台电脑上,同一时刻,每一个端口号,只能为一个运行中的程序提供服务 ,,只有拥到互联网通信的程序,才会拥有端口的概念。端口是虚拟的,端口的范围是0-65535,1-1024是系统占用,一般用8000到10000的端口。

arp协议,查询ip地址和MAC地址的对应关系,地址解析协议,即arp协议是根据ip地址获取物理地址的tcp/ip协议。

3,TCP协议和UDP协议

tcp协议,传输控制协议,提供的是面向连接,可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个tcp协议,之后才能传输数据。tcp协议提供超时重发,丢弃重复数据,检验数据流量控制等功能,保证数据能从一端传到另一端。

当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。

这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接。[1] 
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

tcp的三次握手
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。[1] 
既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
注意:
(1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。[2] 
(2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
(3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。[2]

udp协议,用户数据包协议,是一个简单的面向数据包的运输层协议,udp 不提供可靠性,它只是把应用程序传给ip层的数据包发送出去,但并不能保证他们能到达目的地。由于udp在传输数据时不用在客户和服务器之间建立连接,且没有超时重发等机制,故而传输速度很快。

现在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,
他们对应着Internet上一些常见的服务。这些常见的服务可以分为使用TCP端口(面向连接)和使用UDP端口(面向无连接)两种。 说到TCP和UDP,首先要明白“连接”和“无连接”的含义,他们的关系可以用一个形象地比喻来说明,就是打电话和写信。两个人如果要通话,
首先要建立连接——即打电话时的拨号,等待响应后——即接听电话后,才能相互传递信息,
最后还要断开连接——即挂电话。写信就比较简单了,
填写好收信人的地址后将信投入邮筒,收信人就可以收到了。从这个分析可以看出,
建立连接可以在需要痛心地双方建立一个传递信息的通道,
在发送方发送请求连接信息接收方响应后,由于是在接受方响应后才开始传递信息,而且是在一个通道中传送,
因此接受方能比较完整地收到发送方发出的信息,即信息传递的可靠性比较高。
但也正因为需要建立连接,使资源开销加大(在建立连接前必须等待接受方响应,
传输信息过程中必须确认信息是否传到及断开连接时发出相应的信号等),
独占一个通道,在断开连接钱不能建立另一个连接,即两人在通话过程中第三方不能打入电话。
而无连接是一开始就发送信息(严格说来,这是没有开始、结束的),只是一次性的传递,是先不需要接受方的响应,
因而在一定程度上也无法保证信息传递的可靠性了,
就像写信一样,我们只是将信寄出去,却不能保证收信人一定可以收到。 TCP是面向连接的,有比较高的可靠性, 一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。 而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,
其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,
向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口常为4000或其后续端口的原因了),
即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。

互联网协议与osi模型

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

每层运行常见物理设备

每层运行常见的协议

原文地址:https://www.cnblogs.com/yzxing/p/8996493.html