TCP segment 구조
source port # : 출발지의 port 번호 dest port # : 도착지의 port 번호
sequence number(4bytes) : 보내줘야 할 데이터의 sequence number
여러 개의 패킷을 전달받기 때문에 패킷들의 순서를 보장하기 위해서 sequence number을 알려줘야 함.
ex) 만약 이전 패킷으로 499번 data까지 전달받았다면, 500번부터 받아야 하기 때문에 이번에 보내줘야 할 sequence number가 500번부터라는 정보를 전달함.
acknowledgment number(4bytes) : 몇번째 패킷까지 성공적으로 전달받았는지에 대한 정보
- byte stream number 내가 몇 번째 바이트까지 잘 받았다.
head len(header length) : header는 20bytes로 고정되어 있음. 하지만 header에 담을 정보가 더 필요할 수 있기 때문에 여유 공간을 줌. 확장된 header 정보를 4bits까지 허용함. (0~15) (word단위) 1word= 4bytes
*** 엥 무슨 소리인지 모르겠어.
not used: flag가 확장될 경우 대비해서 비워둔 공간
UAPRSF : bit flags
F: ping 비트 ? 1 > 접속 끊음 0> 평범
S: sink 비트 1> 접속 3-way handshake할 때 0은 평범
R: 접속 중간에 sequence number 등 통신에 필요한 정보를 잃어버리면 접속 초기화 //근데 요즘은 그냥 접속을 끊어버림
R,S,F 는 동시에 1일 수 없음. R,S,F 중 두 개 이상이 1이라면, 보통 패킷이 깨졌네.라고 보는데 지금은 이상한 짓하네? 라고 받아들임
P: push 지금은 안 씀. 1이면 app에 따라 패킷을 빠르게 처리해주세요. 하려고 했ㄴㄴ데 지금 안 씀. 이 플래그의 값이 뭐든 신경 안 씀. 읽지를 않음.
A: ackknowled비트 0이면 acknowledgement number 안 읽음. 값 있어도 신경 안 씀. 근데 보통 0 넣겠지. A비트가 1일 때만 ACKNOWLED NUMBER가 의미가 잇음.
U: urgent point 1이면 Urg data pnter 읽어서 행동해라~인데. 지금은 둘 다 안 씀.
A,R,S,F만 사용