사물인터넷_0509(소켓프로그래밍)

allzeroyou·2022년 5월 9일

사물인터넷

목록 보기
5/7

TCP VS UDP

TCP의 데이터 송신 과정

UCP의 데이터 송신 과정

TCP(Transmission Control Protocol)

TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 성립(establish)하기 위해 연결을 설정해 신뢰성을 보장하는 연결형 서비스이다.

TCP의 특징

연결형 서비스

연결형 서비스로 가상 회선 방식 제공
3-way-handshaking: 연결 설정
4-way-handshaking: 연결 해제

흐름 제어(Flow control)

데이터 처리 속도를 조절해 수신자의 버퍼 오버 플로우 방지

  • 수신자가 윈도우 크기(window size)값을 통해 수신량 정할 수 있음

혼잡제어(Congestion control)

네트워크 내 패킷 수가 넘치게 증가하지 않도록 방지

신뢰성 높은 전송(Reliable transmission)

-Dupack-based retransmission
정상적인 상황에서는 ACK값이 연속적으로 전송되어야!
그러나 ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송 요청
-Timeout-based retransmission
일정시간동안 ACK 값이 수신을 하지 못할 경우 재전송 요청

ack가 깨지면 send 입장에서는 재전송(ack가 안오면, 데이터가 깨진거? ack가 깨진거? 둘중에 뭔지 잘 모르기 때문에)

UDP의 특징

udp: 접속 x, 흐름제어 x
장점: ack 따윈 없고 빠른 데이터 전송 가능
데이터가 깨지면 깨지는 대로 수정 x => realtimeserver에서 사용
유튜브 채널 사용, 멜론(음악스트리밍) 등

=> 어플리케이션에 따라 tcp/udp 나눠져 있음

소켓 프로그래밍(c언어)

클라이언트 -> 소켓 하나만 연결하면 서버 연결 됨.
보편적으로 서버에서는 소켓이 몰린다.
클라이언트가 무조건 request. 서버는 요청에 대한 답만 가능(responce)
반대로 서버는 클라이언트에게 requests 불가

어떤 클라이언트에서 보내는 연결 요청인 connect() 함수는 서버의 accept() 함수가 받음
이때, 두 컴퓨터가 연결된 후 필요한 데이터를 주고 받을 때 사용하는 read()함수 대신 receive() 함수 사용 가능

tcp/udp 함수 차이 있음

ip주소 => char type이기에 문자열로 준다.
ipv4 -> unsigned long이 아닌, char형으로 전달해준다.

sockaddr_in => unsigned short: 16bit

aliases: 별명

accept, recv: blocking 함수(상대방으로부터 올때까지 기다림)

h: host
n: network

hton: host to Nework ordering
ntoh: Network to host

short 타입: 2byte
long타입: 4byte

int 형: 4byte => hton에 l붙이기
ntohl

  • atoi: 문자열 => 숫자로~
    itoa: integer를 ascii로

ntoa(network to ascii)

bind에는 3개의 파라미터가 있음

sockaddr은 구조체이다.
구조체에 하나하나씩 채운 후 파라미터로 구조체 전달 해줌

connect 함수
첫번째에 socket이 들어감
2번째에 접속할 주소
3번째에 주소의 길이 넣어줌

listen: 슬라이딩 윈도우의 최댓값 -> buffer의 초기 크기값
buffer를 meloc을 통해 linked list을 만든다.
이때 값은 backlog 숫자에 맞춰서

profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글