1. OSI的参考模型和TCP/IP协议结构
2 应用层 应用层
3 表示层 ||
4 会话层 ||
5 传输层 传输层(TCP、UDP)
6 网络层 网络层(IP)
7 数据链路层 ||
8 物理层 物理层
2. 端口相关知识和主流的相关服务。
在网络技术中,端口大概有两种意思:一个是物理意义上的端口,例如集线器、交换机、路由器上连接其他网络设备的硬件接口。另一个是逻辑意义上的端口,一般是指TCP/IP协议中的端口,范围是从0~65535。比如浏览器服务用到的80端口,FTP服务的21端口等。逻辑的端口又分为知名端口和动态端口,主机保留了0~1023号端口给一些比较固定的服务,而把1024~65535分配给用户的自定义程序使用。
FTP服务。使用了20和21端口,FTP服务主要是为了在两台计算机之间实现文件的上传和下载,一台计算机作为FTP客户端,另一台计算机作为FTP的服务器端,可以采用匿名(anonymous)登录和授权的用户名和密码登入两种登入方式。21端口是FTP服务传输控制信息的端口,20端口是FTP数据传输的默认端口。
Telnet远程登录服务。使用了23端口。是internet上普遍采用的登入和仿真程序。开启telnet服务的客户端就可以登入远程的telnet服务器,采用授权的用户名和密码登入,登入后可以使用命令提示符来进行相应的操作。
DNS服务。使用53端口,是域名解析服务,主要用于域名与IP地址之间的转换,只要记住域名就可以快速访问网站。
DHCP服务。使用67端口,用于动态分配主机IP地址的服务。
TFTP服务。使用69端口,简单文件传输协议,类似FTP,不过与ftp相比,它不具有复杂的交互存取接口和认证控制,使用了UDP协议来实现。
HTTP服务。使用80端口,即超文本传输协议,是网页传输的主要协议,主要用于万维网上传输信息的协议。
POP2和POP3服务。使用109和110端口,邮件协议,主要用于接收邮件,目前POP3使用得比较多,客户端可以使用POP3协议来访问服务端的邮件服务。
RPC服务。使用135端口,远程过程调用,可以保证一台计算机的程序顺利执行运程计算机上的代码。
NetBIOS名称服务。使用137端口,可以获取计算机的名称、注册用户名,以及是否安装主域控制器。
NetBIOS Session服务。使用139端口,用于提供windows下的文件和打印机共享,以及UNIX和LINUX的Samba服务。
SNMP服务。使用161端口,简单网络管理协议,通过SNMP服务可以提供关于TCP/IP网络上主机以及各种网络设备的状态信息。目前几乎所有的网络设备厂商都实现了对SNMP的支持。
HTTPS服务。使用443端口,是提供加密和通过安全端口传输的另一种HTTP。
3. 如何利用Socket编写TCP和UDP程序?
TCP服务器端程序:a. 调用socket()函数创建一个套接字, b. 调用bind()绑定IP地址和端口, C. 启动一个死循环,调用listen()和accept()接收连接。对于每个可以接受的连接,可以启动线程,然后在线程中循环调用recv()和send()发送和接收数据。d. 调用close()结束。
TCP客户端程序:a. 调用socket()函数创建一个套接字,b. 然后直接connect()连接服务器,C. 最后就调用sent()和receive()发送和接收程序。d. 调用close()结束。
UDP服务器端程序:a. 调用socket()函数创建一个套接字, b. 调用bind()绑定IP地址和端口号, C.使用recvfrom()阻塞函数接收客户端数据,然后调用sendto()函数发送数据到客户端。d. 调用close()结束。
UDP客户端程序:a. 调用socket()函数创建一个套接字, b. 使用sendto()函数发送数据到服务器端, c. 使用recvfrom()函数接收服务器端的数据。d. 调用close()结束。
4. TCP与UDP的区别?
TCP是传输控制协议,提供的是面向连接、可靠的字节流服务。当客户端与服务器交换数据之间,必须先在双方之间建立起一个tcp连接,之后才可以传输数据。TCP提供超时重发,丢弃重复数据、检验数据、流量控制等。
UDP是用户数据报协议,是一个简单的面向数据报的传输层协议。UDP不提供可靠连接,它只是把应用程序传给IP层的数据报发送出去,并不保证数据能到达目的地。使用UDP协议不用在客户端和服务器端建立一个连接,并且没有超时重发机制,故而传输的速率很快。
5. 描述TCP的3次握手过程。
在TCP协议中,使用3次握手建立以个稳定连接。包括有:
第一次握手:建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到SYN包,必须确认客户端的SYN包,于是自己发送一个SYN+ACK包,服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕之后,客户端服务器进入ESTABLISHED状态,完成3次握手。
在3次握手协议中,服务器维护一个未连接的队列,客户端发送第一次握手信号,服务器端回复之后,等待第三次确立连接的客户端的列表。这些条目表示了服务器端处于SYN_RECV状态,当服务器端收到ACK包时,删除队列列表,服务器进入ESTABLISHED状态。服务器在发送完SYN+ACK包,如果未收到客户确认包,会主动进行重传,等待一定时间再进行二次重传,如果重传超过了系统规定的最大重传次数,系统将连接信息从半连接队列删除。
http://www.cnblogs.com/scnutiger/archive/2009/10/26/1590204.html