对于网络的相关概念的理解
计算机之间的数据流动图
网络中工作的物理设备
- 工作在物理层的物理设备(用于进行比特流的转发):
- 转发器(Repeater)称为中继器或放大器,执行物理层协议,作用是放大信号,补偿信号衰减(将接收到的衰减信号恢复到发送时的状态),支持远距离的通信。
- 集线器(HUB)是一种典型或称为特殊的转发器(多端口的转发器)。它的作用可以简单的理解为多端口用网线将一些机器连接起来扩展组成一个局域网。发送数据采用广播通信的方式,它采用共享一根带宽的工作方式,使用端口的所有计算机采用CSMA/CD(载波监听多点接入/碰撞检测)方式竞争带宽的使用,任一时刻只能由两台计算机之间进行通信。
- 工作在数据链路层的物理设备(用于解析获取到的帧,从中获取MAC地址,然后向对应的MAC地址的电脑转发帧):
现在来说以太网是符合DIX Ethernet V2的局域网,数据链路层上的适配器(网卡)是计算机与外界局域网的连接器件,装有MAC协议(产生一个唯一的MAC物理地址标识符,)
- 网桥(Gate Bridge):将获取的帧解析,然后根据解析出来的MAC地址来向对应电脑适配器上的MAC地址来转发帧,它可以有效地联接若干个个LAN(局域网),但是仍然是一个网络,因为这些个局域网都具有相同的网络号,。
- 交换机(Switch):是一种简化的网桥,互连同一网络号的局域网,采用独享带宽的工作方式让计算机独享带宽。
比集线器智能,发送数据时它能分辨出帧中的源MAC地址和目的MAC地址,因此可以在任意两个端口之间建立联系,但并不懂得IP地址。现在的交换机有集线器的功能 。
- 工作在网络层的物理设备
- 路由器:用于解析发送方的ip数据报,从中获得接收方的ip地址,它的作用在于连接相同或不同类型网络,并且能找到网络中数据传输最合适的路径即路由选择。现在的路由器兼备交换机的功能。
- 工作在网络层以上的物理设备
- 网关(Gateway):负责第三层(网络层)以上的数据中继,实现不同体系结构的网络协议转换,它通常采用软件的方法实现,并且与特定的应用服务一一对应。比如:OSI体系结构的文件传输服务FTAM和TCP/IP体系结构的文件传输服务FTP,尽管二者都是文件传输但是由于所执行的协议不同不能直接进行通信,而需要网关将两个文件传输系统互连,达到相互进行文件传输的目的。
网关是一种复杂的网络连接设备,可以支持不同协议之间的转换,实现不同协议网络之间的互连。网关具有对不兼容的高层协议进行转换的能力,为了实现异构设备之间的通信,网关需要对不同的链路层、专用会话层、表示层和应用层协议进行翻译和转换。所以网关兼有路由器、网桥、中继器的特性。
若要使两个完全不同的网络(异构网)连接在一起,一般使用网关,在Internet中两个网络也要通过一台称为网关的计算机实现互联。这台计算机能根据用户通信目标计算机的IP地址,决定是否将用户发出的信息送出本地网络,同时,它还将外界发送给属于本地网络计算机的信息接收过来,它是一个网络与另一个网络相联的通道。为了使TCP/IP协议能够寻址,该通道被赋予一个IP地址,这个IP地址称为网关地址。
所以,网关的作用就是将两个使用不同体系结构的网络段连接在一起的设备,对两个网络段中的使用不同传输协议的数据进行互相的翻译转换。在互连设备中,由于协议转换的复杂性,一般只能进行一对一的转换,
TCP/IP体系结构中的各层的协议
运输层(运输层提供不同主机应用进程之间的逻辑通信,IP层提供的是不同主机之间的逻辑通信)
1.TCP协议:
TCP协议进行通信的两个应用进程是:客户端和服务端 。
使用TCP协议前,须先建立TCP连接,形成传输数据通道。
传输前,采用“三次握手”方式,是可靠的。
可以进行大数据量的传输
传输完毕,需释放已建立的连接,效率低
例:打电话
TCP编程
传输层如果选择的是TCP协议的话,客户端传输用户数据之前,客户端会先与服务端建立TCP连接(三次握手),形成传输数据通道。TCP/IP体系结构中只有形成传输数据通道,才能传输用户数据!
三次握手简单理解(其实只是一次握手,但是其中交换了三个报文):
服务端准备状态:一开始,服务端程序被动创建TCP服务端进程,准备接收客户进程的连接请求,然后服务端进程进入监听状态,等待客户端的连接请求;
客户端准备状态:首先主动创建TCP客户端进程,然后:
- 客户端向服务端发送连接请求报文段(不能携带用户数据,单纯就是为了建立TCP连接)。该报文段的头部中同步位SYN=1,同时选择一个初始序号seq=x。请求发送后,客户端便进入SYN-SENT(同步已发送)状态,服务端进程进入SYN-RCVD(同步收到)状态;
- 服务端收到请求报文段后,如果同意建立连接,则向客户端发送确认报文段(不能携带用户数据,单纯就是为了建立TCP连接),服务端会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。发送完应答后服务端进入SYN-RCVD(同步收到)状态。
- 客户端收到服务端连接同意的应答后,还会向服务端发送一个确认报文段(可以携带数据,但是会消耗序号),表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1。客户端发完这个报文段后便进入ESTABLISHED(已建立连接)状态,服务端收到这个应答后也进入ESTABLISHED(已建立连接)状态,连接建立完成,可以进行传输数据。
三次握手图示:
为什么客户端要发送第三次握手呢,而不是两次握手呢?
因为可以防止已经失效的客户端连接请求报文突然又传送给了服务端,这时候服务端发送确认报文,由于客户端这时候并没有想建立连接,并不会理睬服务器端的确认报文,如果是两次握手的话,这时候服务器端已经处于已建立连接的状态了,所以会一直等着客户端发送数据,所以这时候服务端就会白白浪费一个资源,但是如果是三次握手,当服务端没有收到客户端的确认报文段的话,这时候服务器端不会进入已建立连接的状态,不会浪费资源。
TCP编程中的Socket套接字
- Socket在tcp/ip五层结构中的位置
位于应用层和运输车之间,把复杂的TCP/IP协议族隐藏在Socket接口后面,是允许应用程序访问连网协议的应用编程接口(API),简称为 Socket。
用户利用Socket接口建立两个进程之间的TCP/IP通信连接分为3个步骤:
(1) 服务器进程监听:服务器进程并不定位具体客户端进程的套接字,只是指定自己服务器进程的端口号,然后创建服务器的套接字ServerSocket,然后时刻处于监听状态,如果没有连接,就一直执行阻塞;
(2) 客户端进程请求:客户端进程利用要连接的服务器进程的套接字ServerSocket的地址和端口号来创建客户端进程的套接字Socket对象,然后向服务器套接字Socket提出连接请求(发送一次握手连接,实则发送了三个报文,来进行TCP/IP通信);
(3) 连接确认:当服务器套接字ServerSocket收到客户端套接字Socket发来的请求后,就响应客户端套接字的请求,(猜测是Socke接口底层实现):把服务器端的套接字的描述(服务端的ip和端口号)发给客户端。一旦客户端确认了此描述,就正式建立连接。然后接收客户端的套接字Socket,进行与客户端的TCP/IP通信之间的数据传输
而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求,实现多客户端连接服务端的并发。.
TCP编程的细节1:在客户端与服务端传输数据中,需要关闭输出流之前(半关闭也算),必须调用一下输出流的flush()方法,不然可能会丢失数据!
TCP编程的细节2:其实客户端和服务端在建立好连接时,不仅服务端有一个端口,其实客户端也是通过一个端口与服务器进行通讯,不过客户端的端口是由TCP/IP来随机分配!
Dos控制台下的netstat指令
- netstat -an命令查看当前主机网络情况,包括端口监听和网络连接情况
- 管理员权限下netstat -anb命令查看当前主机那些程序占用的端口号和连接情况
- netstat -an | more命令可以分页显示情况
- ctrl+c退出指令
2. UDP协议:
将数据,源,目的封装成数据包,不需要建立连接
每个数据报的大小限制在64k内,不能进行大数据量的传输
因为不需要建立连接,所以是不可靠的
发送数据结束时,不需要断开连接,所以效率高,速度快
例:发短信