网络编程第四天
文章目录
一、Internet基本概念
Internet-“冷战”的产物
1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天
1958年美国总统~~艾森豪威尔~~ 向美国国会提出建立DARPA (Defense Advanced Research Project Agency),即~~国防部高级研究计划署~~ ,简称ARPA
1968年6月DARPA提出“资源共享计算机网络” (Resource Sharing Computer Networks),目的在于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即~~“阿帕网”~~ ,是Interne的最早雏形
网络互联促成了TCP/IP协议的产生
早期的ARPAnet使用网络控制协议(Network Control Protocol,NCP),不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能
1973年由~~Kahn~~ 和~~Vinton Cer~~ f两人合作为ARPAnet开发了新的互联协议。
1974年12月两人正式发表第一份TCP协议详细说明,但此协议在有数据包丢失时不能有效的纠正
二、TCP/IP协议
TCP协议分成了两个不同的协议:
**用来检测网络传输中差错的传输控制协议TCP
专门负责对不同网络进行互联的互联网协议IP**
从此,TCP/IP协议诞生
1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议。TCP/IP协议成为Internet中的“世界语”
OSI开放系统互联模型
OSI模型相关的协议已经很少使用,但模型本身非常通用
OSI模型是一个理想化的模型,尚未有完整的实现

TCP/IP协议族的体系结构



TCP/IP协议
传输控制/网际协议(Transfer Control Protocol/Internet Protocol) 又称作网络通讯协议
Internet国际互联网络的基础,RFC793
一组协议,通常称它为TCP/IP协议族
四个层次:网络接口层、网际层、传输层、应用层
TCP/IP协议通信模型

三、TCP和UDP
TCP协议特点
TCP(即传输控制协议)
是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
适用情况:
适合于~~对传输质量要求较高~~ ,以及~~传输大量数据~~ 的通信。
在需要可靠数据传输的场合,通常使用TCP协议
MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
UDP协议的特点
UDP(User Datagram Protocol)用户数据报协议
是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
适用情况:
~~发送小尺寸数据~~ (如对DNS服务器进行IP地址查询时)
在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
适合于广播/组播式通信中。
MSN/~~QQ~~ /Skype等即时通讯软件的点对点文本通讯以及~~音视频通讯~~ 通常采用UDP协议
流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输

1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口
1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信
现在很多应用 (FTP, Telnet, etc) 都依赖这一接口
Socket
是一个编程接口
是一种特殊的文件描述符 (everything in Unix is a file)
并不仅限于TCP/IP协议
面向连接 (Transmission Control Protocol - TCP/IP)
无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)
独立于具体协议的网络编程接口
在OSI模型中,主要位于会话层和传输层之间
BSD Socket(伯克利套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。
流式套接字(SOCK_STREAM)
**流式套接字(SOCK_STREAM)**:提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
**数据报套接字(SOCK_DGRAM)**
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
**原始套接字(SOCK_RAW)**
可以对较低层次协议如IP、ICMP直接访问。
IP地址
IP地址是Internet中主机的标识
Internet中的主机要与别的机器通信必须具有一个IP地址
IP地址为32位(IPv4)或者128位(IPv6)
每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由
表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。
IP地址分类
子网掩码
端口号
为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别
TCP端口号与UDP端口号独立
端口号一般由IANA (Internet Assigned Numbers Authority) 管理
众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
注册端口:1024~49150
动态或私有端口:49151~65535
字节序
不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO):
小端序(little-endian)
低序字节存储在低地址将低字节存储在起始地址,称为“Little-Endian”字节序,Intel、AMD等采用的是这种方式;
大端序(big-endian)
高序字节存储在低地址
将高字节存储在起始地址,称为“Big-Endian”字节序,由ARM、Motorola等所采用。
网络中传输的数据必须按网络字节序,即大端字节序
在大部分PC机上,当应用进程将整数送入socket前,需要转化成网络字节序;当应用进程从socket取出整数后,要转化成小端字节序(原因?)

把给定系统所采用的字节序称为主机字节序。为了避免不同类别主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序。
主机字节序到网络字节序
u_long htonl (u_long hostlong);
u_short htons (u_short short);
网络字节序到主机字节序
u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);
IP地址的转换
inet_aton( )
将strptr所指的字符串转换成32位的网络字节序二进制值
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
inet_addr( )
功能同上,返回转换后的地址。
int_addr_t inet_addr(const char *strptr);
inet_ntoa( )
将32位网络字节序二进制地址转换成点分十进制的字符串。
char *inet_ntoa(stuct in_addr inaddr);
inet_pton()
将IPV4/IPV6的地址转换成binary格式
int inet_pton(int af, const char *src, void *dst);

6991

被折叠的 条评论
为什么被折叠?



