UDP 복습
연결 지향 : Threeway handshake
흐름 기반
신뢰성 : 재 전송, 재 조합
단점 : 낮은 성능, 데이터의 연속성 유지에 불리하다.
스트리밍 방송은 사용 (어느 정도의 잡음이 있어도 괜찮다)
신뢰성이 꼭 필요하면, TCP를 사용해야 하지만 그렇지 않다면 무 필요.
=> UDP
User DataGram Protocol (UDP)
DataGram 중심 프로토콜
Fire and Forget
순서가 없다
신뢰할 수 없다.
높은 성능을 기대
=> 실시간 스트리밍 방송에 사용 가능
UDP 헤더는 4개의 필드로 구성되며, 그 각각은 2바이트(16비트)로 이루어져 있다.[1]
오프셋 | 옥텟 | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
옥텟 | 비트 |
0 |
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 |
27 |
28 |
29 |
30 |
31
|
0 | 0
|
출발지 포트 | 도착지 포트 | ||||||||||||||||||||||||||||||
4 | 32
|
길이 | 체크섬 |
socket(AF_INET, SOCK_DGRAM, 0)
Server
socket() -> bind ->( sendto, recefrom) -> close (listen(), accept() 사용 x)
UDP bind
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(1234);
state = bind(sockfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr));
recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *) &cliaddr, &clilen);
recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&cliaddr &clilen);
sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
close(sockfd);
=> 연결 관리가 불 필요하기 때문에 간단하다.
Client
scoket() -> sendto(), recvfrom() -> close();
connect를 사용하지 않아도 되지만 사용해도 된다.
connet(sockfd, &addr, sizeof(addr));
sendto(sockfd, buf, strlen(buf, 0, NULL, len); // NULL을 사용하면 이미 명시된 주소에 연결된다.
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
'C_C++ 프로그래밍 > 뇌를 자극하는 TCP_IP' 카테고리의 다른 글
뇌자극 TCP/IP 11강 요약 (0) | 2019.06.02 |
---|---|
뇌자극 TCP/IP 10강 요약 (0) | 2019.06.02 |
뇌자극 TCP/IP 8강 요약 (0) | 2019.05.26 |
뇌자극 TCP/IP 7장 요약 (0) | 2019.05.25 |
댓글