
TCP의 데이터 송신 과정

UCP의 데이터 송신 과정

TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 성립(establish)하기 위해 연결을 설정해 신뢰성을 보장하는 연결형 서비스이다.
연결형 서비스로 가상 회선 방식 제공
3-way-handshaking: 연결 설정
4-way-handshaking: 연결 해제
데이터 처리 속도를 조절해 수신자의 버퍼 오버 플로우 방지
네트워크 내 패킷 수가 넘치게 증가하지 않도록 방지
-Dupack-based retransmission
정상적인 상황에서는 ACK값이 연속적으로 전송되어야!
그러나 ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송 요청
-Timeout-based retransmission
일정시간동안 ACK 값이 수신을 하지 못할 경우 재전송 요청
ack가 깨지면 send 입장에서는 재전송(ack가 안오면, 데이터가 깨진거? ack가 깨진거? 둘중에 뭔지 잘 모르기 때문에)
udp: 접속 x, 흐름제어 x
장점: ack 따윈 없고 빠른 데이터 전송 가능
데이터가 깨지면 깨지는 대로 수정 x => realtimeserver에서 사용
유튜브 채널 사용, 멜론(음악스트리밍) 등
=> 어플리케이션에 따라 tcp/udp 나눠져 있음
클라이언트 -> 소켓 하나만 연결하면 서버 연결 됨.
보편적으로 서버에서는 소켓이 몰린다.
클라이언트가 무조건 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
ntoa(network to ascii)
bind에는 3개의 파라미터가 있음
sockaddr은 구조체이다.
구조체에 하나하나씩 채운 후 파라미터로 구조체 전달 해줌
connect 함수
첫번째에 socket이 들어감
2번째에 접속할 주소
3번째에 주소의 길이 넣어줌
listen: 슬라이딩 윈도우의 최댓값 -> buffer의 초기 크기값
buffer를 meloc을 통해 linked list을 만든다.
이때 값은 backlog 숫자에 맞춰서