USTC Computer Networking Chapter2

第二章 应用层

应用层原理

  • 常见架构
    • 客户-服务器模式(C/S:client/server)
    • 对等模式(P2P:Peer To Peer)
    • 混合体:客户-服务器和对等体系结构
  • 流行的应用层协议
    • HTTP
    • FTP
    • SMTP/POP3/IMAP
    • DNS
  • 进程编址
    • 主机:唯一的 32位IP地址
    • 仅仅有IP地址不能够唯一标示一个进程;在一台端系统上有很多应用进程在运行
    • 所采用的传输层协议:TCP or UDP
    • 端口号(Port Numbers)16位
    • 一些知名端口号的例子:HTTP: TCP 80 Mail: TCP25 ftp:TCP 2
  • TCP socket
    • 对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标示
    • 4元组:(源IP,源port,目标IP,目标port)
    • 唯一的指定了一个会话(2个进程之间的会话关系)
    • 应用使用这个标识,与远程的应用进程通信
  • UDP socket
    • 对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示
    • 2元组:IP,port (源端指定)
    • UDP套接字指定了应用所在的一个端节点(end point)
    • 在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己所采用的ip和port
    • 但是在发送报文时,必须要指定对方的ip和udp port(另外一个段节点)
  • 安全TCP -> SSL
    • 在TCP上面实现,提供加密的TCP连接,一般归类于应用层
    • 私密性
    • 数据完整性
    • 端到端的鉴别
    • https = http + SSL

Web 与 HTTP

  • Web
  • http


  • http报文


  • 往返时间RTT(round-trip time):一个小的分组从客户端到服务器,在回到客户端的时间(传输时间忽略)
  • Cookies
  • Web缓存(代理服务器proxy)
  • 为解决代理服务器网页过时的问题

FTP

EMail


DNS

  • DNS的空间划分是逻辑的,而不是物理的,同一空间的域名可以在不同物理空间中
  • 域名结构
  • 权威DNS服务器
  • TLD服务器
  • 资源记录


  • 查询方式:递归、迭代
  • DNS报文
  • DNS攻击

P2P

  • BitTorrent
  • Gnutella
  • KaZaA
  • Distributed Hash Table (DHT)

CDN

  • 内容分发网络(Content Delivery Network)
  • DASH
  • CDN
  • Netflix购买亚马逊服务器实现高速的视频流化服务
  • 互联网的角色
    • 用户
    • ISP
    • ICP
    • CDN提供商

TCP Socket编程

  • 重要的结构体
  • 从上到下分别是地址簇、端口号、ip地址、对齐
  • TCP交互模式
  • C客户端(TCP)
client.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* client.c */
void main(int argc, char *argv[])
{
struct sockaddr_in sad; /* structure to hold an IP address of server */
int clientSocket; /* socket descriptor */
struct hostent *ptrh; /* pointer to a host table entry */
char Sentence[128];
char modifiedSentence[128];
host = argv[1]; port = atoi(argv[2]);
clientSocket = socket(PF_INET, SOCK_STREAM, 0);
memset((char *)&sad,0,sizeof(sad)); /* clear sockaddr structure */
sad.sin_family = AF_INET; /* set family to Internet */
sad.sin_port = htons((u_short)port);
ptrh = gethostbyname(host);
/* Convert host name to IP address */
memcpy(&sad.sin_addr, ptrh->h_addr, ptrh->hlength);
//将IP地址拷贝到sad.sin_addr
connect(clientSocket, (struct sockaddr *)&sad, sizeof(sad));
gets(Sentence);
n=write(clientSocket, Sentence, strlen(Sentence)+1);
n=read(clientSocket, modifiedSentence, sizeof(modifiedSentence));
printf("FROM SERVER: %s\n",modifiedSentence);
close(clientSocket);
}
  • C服务器(TCP)
server.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* server.c */
void main(int argc, char *argv[])
{
struct sockaddr_in sad; /* structure to hold an IP address of server*/
struct sockaddr_in cad; /*client */
int welcomeSocket, connectionSocket; /* socket descriptor */
struct hostent *ptrh; /* pointer to a host table entry */
char clientSentence[128];
char capitalizedSentence[128];
port = atoi(argv[1]);
welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);
memset((char *)&sad,0,sizeof(sad)); /* clear sockaddr structure */
sad.sin_family = AF_INET; /* set family to Internet */
sad.sin_addr.s_addr = INADDR_ANY; /* set the local IP address */
sad.sin_port = htons((u_short)port);/* set the port number */
bind(welcomeSocket, (struct sockaddr *)&sad, sizeof(sad));
/* Specify the maximum number of clients that can be queued */
listen(welcomeSocket, 10)
while(1) {
connectionSocket=accept(welcomeSocket, (struct sockaddr *)&cad, &alen);
n=read(connectionSocket, clientSentence, sizeof(clientSentence));
/* capitalize Sentence and store the result in capitalizedSentence*/
n=write(connectionSocket, capitalizedSentence, strlen(capitalizedSentence)+1);
close(connectionSocket);
}
}

UDP Socket编程

  • UDP交互模式

习题

作者

huayi

发布于

2023-05-28

更新于

2023-05-29

许可协议