计算机网络
计算机网络是相互连接的独立自主的计算机的集合,最简单的网络形式是由两台计算机组成
IP地址
IP网络中每台主机都必须有一个唯一的IP地址
IP地址是一个逻辑地址
因特网上的IP地址具有全球唯一性
表现为32位,4个字节,常用点分十进制的格式表示,eg.192.168.1.1
协议
为网络中的数据交换(通信)建立的规则/标准
网络不同层具有各自不同的协议
网络体系结构
解决异质性问题采用的是分层方法——把复杂的网络互连问题划分为若干个较小的单一问题,在不同层上予以解决
OSI分层 | 功能 | TCP/IP分层 | 协议 | |
---|---|---|---|---|
最顶层 | 应用层 | 处理网络应用 | 应用层 | FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS |
表示层 | 对数据进行翻译、加密和压缩(表示协议数据单元PPDU)数据表示 | JPEG、MPEG、ASII | ||
会话层 | 主机间通信(会话协议数据单元SPDU) | NFS、SQL、NETBIOS、RPC | ||
传输层 | 提供端到端的可靠报文传递和错误恢复(段Segment) | 传输层 | TCP、UDP、SPX | |
网络层(路由器) | 负责数据包从源到宿的传递和网际互连(包Packet) | 网络层 | IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP | |
数据链路层(网桥,交换机) | 将比特组装成帧和点到点的传递(帧Frame)介质访问/接入 | 网络接口 | PPP、FR、HDLC、VLAN、MAC | |
最底层 | 物理层(中继器,集线器,网关) | 通过媒介传输比特,确定机械及电气规范(比特)二进制传输 | RJ45、CLOCK、IEEE802.3 |
通信实体对等层次间不允许直接通信 对等层通信实质:1.对等层实体间虚拟通信;2.上层使用下层提供的服务,下层向上层提供服务,实际通信在最底层完成
各层之间是严格单向依赖
TCP/IP体系结构与特点
IP(Internet Protocal)网间协议,负责主机间数据的路由和网络上数据的存储,同时为ICMP,TCP,UDP提供分组发送服务,用户进程通常不需要涉及这一层
TCP传送控制协议, 提供给用户进程的可靠的全双工字节流面向连接的协议,为用户进程提供虚电路服务,并为数据可靠传输建立检查
UDP用户数据报协议, 提供给用户进程的无连接协议,用于传送数据而不执行正确性检查
ARP地址解析协议,将网络地址映射到硬件地址; RARP反向地址解析协议, 将硬件地址映射到网络地址
ICMP网间报文控制协议,处理信关和主机的差错和传送控制
FTP文件传输协议, 允许用户以文件操作的方式与另一台主机相互通信
SMTP简单邮件传动协议,为系统之间传送电子邮件
TELNET终端协议, 允许用户以虚终端方式远程访问主机
HTTP超文本传输协议
TFTP简单文件传输协议
C/S模式
该模式的建立基于以下两点:
- 非对等作用.(各种运算能力,资源不均等需要共享, 资源少的用户请求服务)
- 网间进程通信完全是异步的(需要一种机制(C/S)给他们建立联系)
模式实现
- 客户机/服务器模式在操作过程中采取的是主动请求方式
首先服务器要先启动,并根据请求提供相应的服务
服务器 | 客户端 |
---|---|
①打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求 | ①打开一个通信通道,并连接到服务器所在主机的特定端口 |
②等待客户请求到达端口 | ②向服务器发送服务请求报文,等待并接收应答 |
③接收到重复服务请求,处理该请求并发送应答信号 | ③请求结束后关闭通信通道并终止 |
④返回第②步,等待另一客户请求 | ----- |
⑤关闭服务器 | ----- |
网络通信相关的问题
socket套接字
socket的引入是为了解决不同电脑进程间通信的问题
socket与进程的关系
socket 用于进程间通信(IPC)以及不同计算机联网通信,而socket接口是TCP/IP网络的API接口函数。
socket与文件的关系(如何理解socket是一种特殊的I/O)
- socket最先用于Unix系统的I/O,socket数据传输就是一种特殊的I/O
- 可对其进行文件操作
- 有文件描述符
服务器端口和连接个数的关系
一个线程对应一个socket,socket可以生成多个但是服务器监听客户端的端口号不变,同一时间一个端口只能建立一个连接,但是在监听端口的时候,每个来自客户端的连接都会送到等待队列,即一个端口监听多个请求。
网络I/O数和CPU数目一致将是比较好的情况(考虑到多线程多进程可以提高效率),没必要为每个客户分配一个端口。
eg. QQ的消息实现,在登陆的时候告诉服务器你已经登陆,发送消息的时候,首先你会发送一个包给服务器,服务器查看你需要发送的对方是否在线,如果在线就返回包告诉你对方在线,然后你就会和对方建立一个连接,然后直接发消息给对方,如果对方不在线,那么就会通过服务器转发你这次的消息
socket监听的一个端口最多可以有几个客户连接
- linux2.4下,最多可以有1024个socket连接
- 同时连接请求好像是5个(是连接请求,不是连接),可保持的链接理论上是65535(2字节的SOCKET端口号
- listen()中有个参数,应该是确定并行连接客户数?!
server与client想建立socket连接,server仅知道client的IP,端口号不知道,能建立连接吗?怎么建立呢?有没有代码看看?
😳
路由器,交换机/网桥,网关
-
路由器(Router)
提供路由和转送两种重要机制
路由, 决定数据包从来源端到目的端所经过的路由路径(主机到主机)
转送, 将路由器输入端的数据包移送至适当的路由器输出端(路由器内部)
两个作用: ①连通不同的网络②选择信息传送的线路 -
交换机
在计算机网络系统中,交换机是针对共享工作模式的弱点提出来的,工作于第二层(数据链路层)
交换机内部的CPU会在每个端口成功连接时通过ARP协议学习它的MAC地址,保存一张ARP表,在今后的通讯中发往该MAC地址的数据包将仅送往其对应的端口而不是所有的端口
因此交换机可用于划分数据链路层广播(冲突域),而不能划分网络层广播(广播域) -
网关(GateWay)
在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host),网关能在网络间转递数据包,但主机不能转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。
网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。
eg 语音网关
连接PSTN网络和以太网,相当于VOIP, 把不同电话中的模拟信号通过网关转换成数字信号,加入协议后进行传输, 在到了接收端的时候再通过网关还原成模拟的电话信号,然后才能在电话上听到
和路由一样, 以太网中的网关只能转发三层以上数据包,不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
TCP三次握手(建立连接)和四次挥手(断开连接)全过程
三次握手:
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
- 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
四次挥手(SYN换FIN)
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手:主动关闭方发送一个FIN包,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了,此时主动关闭方还可以接受数据。(在FIN包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据)
第二次挥手:被动关闭方收到FIN包后,发送一个ACK包给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN包,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
eg.在浏览器中输入www.baidu.com后执行的全部过程
1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、包通过客户端的链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?
答:建立连接的过程是利用客户/服务器模式,假设主机A为客户端,主机B为服务器端。
(1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。 失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。
考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
http和https的区别
1、HTTP 是超文本传输协议,明文传输信息,HTTPS 则是具有安全性的 SSL 加密传输协议。
2、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)
3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
TCP和ICP的区别
TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。
DNS域名系统,简单描述其工作原理。
当DNS客户机需要在程序中使用名称时,它会查询DNS服务器(应用层)来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
面向连接和非面向连接的服务的特点是什么?
面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。