: 커널 안에서 소켓이 생성되고, 서로 연결되는 전 과정
# 서버 측
1- 소켓 생성
//소켓 생성
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
--> 커널: TCP용 IPv4 소켓 하나 만듦

2- 소켓 <- IP+포트번호 bind
// [IP+포트번호] 설정
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8080);
bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
--> 커널: 이 소켓은 0.0.0.0 : 8080 (=모든 IP의 8080포트) 담당하도록 설정

3- listen() :연결 받을 준비 완료
listen(listenfd, 10);
--> 커널: 8080포트에서 클라 연결 받을 준비 완료시킴 (연결요청 동시대기 최대 개수: 10)

4- accept(): 연결 수락
int connfd = accept(listenfd, (struct sockaddr*)&cliaddr, &clilen);
--> 커널: 새 소켓 복제해서, 클라의 IP/포트 정보를 연결 정보로 채워넣음

# 클라 측
1- 소켓 생성
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
--> 커널: 클라이언트용 TCP소켓 하나 생성 (IPv4)

2- connect()
--> 커널:
1) 서버주소 읽음
2) 클라쪽 IP/포트 자동 할당 (ex. 127.0.0.1 : 52341)
3) TCP 3-way handshaking 실행
4) 연결 성공 시 상태 변경

>>> 연결 완성 후
-> 이제 클라의 sockfd <----> 서버의 connfd
둘이 커널 레벨에서 TCP로 연결된 한쌍의 통로 됨


'STUDY > 정글' 카테고리의 다른 글
| [정글] W10 학습 키워드 정리 (0) | 2025.11.13 |
|---|---|
| [정글] W8 퀴즈 개념정리 (0) | 2025.11.11 |
| [웹서버] echo 서버 구현 (0) | 2025.11.05 |
| [csapp] 세마포어로 쓰레드 동기화하기 (12.5) (0) | 2025.11.03 |
| [TIL] 포인터 문제풀이(2) - G2G (0) | 2025.10.15 |